Webhook

Habiticaは、アカウントで発生する可能性がある特定のアクション（たとえば、タスクを完了したとき、または所属しているギルドに誰かがメッセージを投稿したとき）に「ウェブフック」を提供します。そのようなアクションが発生するとWebhookがトリガーされ、アクションに関する情報が別のWebサイトのスクリプトまたはその他のツールに送信されます。

## 詳細な技術情報

HabiticaはPOSTリクエストでWebhook URLを呼び出します。

HabiticaのWebhookから情報を受信するスクリプトを指定するには、HabiticaのWebサイトにログインし、[ユーザーアイコン]> [設定]> [API]に移動します。

詳細については、HabiticaのAPIドキュメントのWebhooksセクションをご覧ください。

誤ったURLを指定すると、Habiticaでエラーまたは速度低下が発生する可能性があるため、Webhookの動作が不明な場合は、この機能を使用しないことをお勧めします。Webhookは、タイムアウトエラーがトリガーされるまでに、2xx HTTPコードの応答に30秒かかります。最適解は、200 HTTPコードと空ではない応答（例：非常に小さいjson、または`HtmlService.createHtmlOutput()`を使用）を含むリクエストを受信したらすぐにHabiticaサーバーに応答することです。これにより、Habiticaサーバーが必要最低限​​の時間（応答を送信した後にデータを処理できます）でWebhookに接続されたままになり、30秒のタイムアウト制限に達するリスクがなくなります。月に10回以上失敗したWebhookは自動的に無効になります。

Webhookに応答するスクリプトの開発についてサポートが必要な場合は、Aspiring Comradesギルドで他の開発者にアドバイスを求めてください。

Webhook開発の認知度を高めたい場合は、en:Guidance for Comrades（未翻訳）で詳細を確認してください。

例

### Python Flaskの例

次のスクリプトは、Python Flaskを使用してWebhookの処理を実装しています。HabiticaのWebサイトに入力するURLは次のようになります。`http://<your_ip>:<your_port>/taskevent`

Flaskはデフォルトでポート5000を監視しますが、<your\_port>で示される別のポートを指定できます。

スクリプトがファイアウォールの背後でホストされている場合は、ポート転送を使用するか、ファイアウォールを介したポートへのアクセスを許可する必要があります。

```
from flask import Flask, request
app = Flask(__name__)
  # URI for receiving inbound webhook request
@app.route('/taskevent', methods=['POST'])
def webhook():
    # Request contains data as shown at https://habitica.com/apidoc/#api-Webhook
     # .json converts request to Python dictionary
    print(request.json)  # type: dict

    # <YOUR CODE FOR HANDLING EVENT HERE>

    return '', 200 # Return 200 code to the sending webserver

if __name__ == "__main__":
    app.run(host='0.0.0.0', port='<your_port>')

```

### Google Apps Scriptの例

次のスクリプトは、Google Apps Scriptを使用してHabitica Webhookを監視します。スクリプトは、「バージョンの管理」を使用して編集するたびに新しいバージョンとして保存する必要があります。新しいバージョンを有効にするには、「Webアプリ」としてデプロイし、スクリプトを「As Yourself」で実行して、「everyone, even anonymous」にアクセスを許可する必要があります。

次の例は、クエストの招待を即座に自動承諾します。

```
function doPost(e) {
  var habiticaUserId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // your Habitica UserId
  var habiticaApiToken = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; // your Habitica API-Token (don't share, = password!)

  try {
    var dataContents = JSON.parse(e.postData.contents);
    var type = dataContents.type;
  } catch (err) {}

  if (type == 'questInvited') {
    var params = {
      "method": "post",
      "headers" : {
        "x-client": habiticaUserId + "-Webhook Script questInvited",
        "x-api-user": habiticaUserId,
        "x-api-key": habiticaApiToken
      }
    }

    var url = "https://habitica.com/api/v3/groups/party/quests/accept";
    UrlFetchApp.fetch(url, params);
  }

  return HtmlService.createHtmlOutput();
}

```

詳細：Google Apps ScriptによるWebhook処理

## Webhookのサードパーティツール

現在、Webhookを作成および編集するためのHabiticaの独自のインターフェースは制限されていますが、HabiticaのAPIはより詳細な制御を提供します。つまり、以下にリストされているようなWebhookのセットアップにサードパーティツールを使用できます。拡張機能・アドオン・カスタマイズページに他のページが表示される場合があります。サードパーティのツールと同様に、使用に適しているかどうかを慎重に評価する必要があります。Habiticaのスタッフは、ツールを直接サポートしたり、ツールを保証したりしません。

* Habitica Webhook Editor
* en:Habitica Api-Helper Tool（未翻訳）

英語版のWebhooksの情報を正確に反映していることを保証しません。翻訳に時間を要するため、最新の情報ではない場合があります。このページは、未実装、未翻訳、すでにゲームには存在しないコンテンツにリンクしている可能性があります。翻訳に参加したい場合は、Habitica日本語訳ギルド へお越しください。