コールバック

翻訳のご注文を送信されるときには、ご注文中の各案件用に “callback_url” を設定できます。Gengoでは案件にアップデートがあるつど、あなたのシステムとGengoを同期化するための最も効率的な方法でアップデート内容をお知らせします。

コールバック通知は、以下のときに送られます:

  • 案件が、弊社翻訳者にとって受注可能になったとき
  • 案件が、弊社翻訳者によって翻訳が開始された時
  • 案件がレビュー可能になったとき
  • 案件が承認されたとき
  • 案件の承認が、弊社のGengoのお客様用インターフェースの依頼管理ボードからマニュアルで行われたとき
  • 案件に翻訳者からのコメントがあったとき

コールバックURLへのデータ提出が15分毎に1回、最大12時間試行されます。エンドポイントに到達できない場合は、 GET /translate/order/{id}/ エンドポイントを使って翻訳を受け取ることをお勧めします。

ファイル案件の場合、あなたのコールバックに送られるリクエストには “file_url_tgt” のパラメータが含まれおり、これは翻訳されたファイルへのリンクです。このリンクは Job(GET) でGETから取得されるファイル案件用URLとは異なっています (その場合は “src_file_link” になります)。

コールバックは60KB以上の内容を送ることができません。もし大容量のテキストを送りたい場合は、 Job(GET) を使用ください。こちらの問題の恒久的な対応につきましては現在対応中です。

コールバックURLは認証情報を含むことはできません。

パラメータフォーマット

コールバックのパラメータはJSON形式になっており、POSTの呼び出しで送信されます。案件関連の通知用には、案件のペイロードは “job” と名付けられたパラメータに含まれ、レスポンスであるかのようにPOSTされます。以下は、クライアントがGengoから受け取る案件関連のコールバック通知の一例です:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgi
import json
form = cgi.FieldStorage()

print("Content-type: text/html\n")

if "job" in form:
    json_data = form["job"].value
else:
    json_data = False

if json_data:
    print(json.loads(json_data, 'utf-8'))
else:
    print("fail")

コメント関連の通知は、翻訳者が案件にコメントした際に同じコールバック先に送付されます。ペイロードは、”comment” と名付けられたパラメータに含まれ、以下のように表示されます:

job_id : 文字列 コメントを適用する案件ID

body : 文字列 コメント本文。

ctime : 文字列 コメントの提出時刻を表すUnix タイムスタンプ

custom_data : 文字列 案件に関連付けられたカスタムデータ (存在する場合)

file_url_tgt : 文字列 ターゲットファイルのフルURL

案件にコメントがあったときにクライアントが受け取るコールバック通知の例をご紹介します:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/python
# -*- coding: utf-8 -*-

import cgi
import json
form = cgi.FieldStorage()

print("Content-type: text/html\n")

if "comment" in form:
    json_data = form["comment"].value
else:
    json_data = False

if json_data:
    data = json.loads(json_data, 'utf-8')
    comment = {}

    # job id to which comment applies
    comment["job_id"] = data["job_id"]

    # actual comment text
    comment["body"] = data["body"]

    # comment creation time
    comment["ctime"] = data["ctime"]

    # custom data from job (if any)
    custom_data = data["custom_data"] if "custom_data" in data else None

    print(comment)
    print(custom_data)
else:
    print("fail")