本指南将教你如何使用 webhook 在 Meilisearch 完成任务时通知指定 URL。

前提条件

  • 命令行终端
  • 自托管的 Meilisearch 实例
  • 配置好能接收 ndjson 格式 POST 请求的服务器

配置 Webhook URL

重启你的 Meilisearch 实例并通过 --task-webhook-URL 参数指定 webhook URL:

meilisearch --task-webhook-url http://localhost:8000

你也可以通过环境变量或在配置文件中使用 MEILI_TASK_WEBHOOK_URL 来定义 webhook URL。

可选:配置授权头

根据你的配置需求,可能需要提供授权头信息。通过 task-webhook-authorization-header 参数指定:

meilisearch --task-webhook-url http://localhost:8000 --task-webhook-authorization-header Bearer aSampleMasterKey

测试 webhook

一个常见的异步操作是向索引添加或更新文档。以下示例向我们的 books 索引添加了一个测试文档:

curl \
  -X POST 'MEILISEARCH_URL/indexes/books/documents' \
  -H 'Content-Type: application/json' \
  --data-binary '[
    {
      "id": 1,
      "title": "Nuestra parte de noche",
      "author": "Mariana Enríquez"
    }
  ]'

当 Meilisearch 完成该文档的索引后,它会向 --task-webhook-url 配置的 URL 发送一个 POST 请求。请求体将是一个或多个 ndjson 格式的任务对象:

{"uid":4,"indexUid":"books","status":"succeeded","type":"documentAdditionOrUpdate","canceledBy":null,"details.receivedDocuments":1,"details.indexedDocuments":1,"duration":"PT0.001192S","enqueuedAt":"2022-08-04T12:28:15.159167Z","startedAt":"2022-08-04T12:28:15.161996Z","finishedAt":"2022-08-04T12:28:15.163188Z"}

如果 Meilisearch 批量处理了多个任务,它只会在批次中所有任务都完成后触发 webhook。这种情况下,响应负载将包含所有任务,每个任务用换行符分隔:

{"uid":4,"indexUid":"books","status":"succeeded","type":"documentAdditionOrUpdate","canceledBy":null,"details.receivedDocuments":1,"details.indexedDocuments":1,"duration":"PT0.001192S","enqueuedAt":"2022-08-04T12:28:15.159167Z","startedAt":"2022-08-04T12:28:15.161996Z","finishedAt":"2022-08-04T12:28:15.163188Z"}
{"uid":5,"indexUid":"books","status":"succeeded","type":"documentAdditionOrUpdate","canceledBy":null,"details.receivedDocuments":1,"details.indexedDocuments":1,"duration":"PT0.001192S","enqueuedAt":"2022-08-04T12:28:15.159167Z","startedAt":"2022-08-04T12:28:15.161996Z","finishedAt":"2022-08-04T12:28:15.163188Z"}
{"uid":6,"indexUid":"books","status":"succeeded","type":"documentAdditionOrUpdate","canceledBy":null,"details.receivedDocuments":1,"details.indexedDocuments":1,"duration":"PT0.001192S","enqueuedAt":"2022-08-04T12:28:15.159167Z","startedAt":"2022-08-04T12:28:15.161996Z","finishedAt":"2022-08-04T12:28:15.163188Z"}