コールバック¶
翻訳のご注文を送信されるときには、ご注文中の各案件用に "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#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4import cgi
5import json
6form = cgi.FieldStorage()
7
8print("Content-type: text/html\n")
9
10if "job" in form:
11 json_data = form["job"].value
12else:
13 json_data = False
14
15if json_data:
16 print(json.loads(json_data, 'utf-8'))
17else:
18 print("fail")
コメント関連の通知は、翻訳者が案件にコメントした際に同じコールバック先に送付されます。ペイロードは、"comment" と名付けられたパラメータに含まれ、以下のように表示されます:
job_id
: 文字列 コメントを適用する案件ID
body
: 文字列 コメント本文。
ctime
: 文字列 コメントの提出時刻を表すUnix タイムスタンプ
custom_data
: 文字列 案件に関連付けられたカスタムデータ (存在する場合)
file_url_tgt
: 文字列 ターゲットファイルのフルURL
案件にコメントがあったときにクライアントが受け取るコールバック通知の例をご紹介します:
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4import cgi
5import json
6form = cgi.FieldStorage()
7
8print("Content-type: text/html\n")
9
10if "comment" in form:
11 json_data = form["comment"].value
12else:
13 json_data = False
14
15if json_data:
16 data = json.loads(json_data, 'utf-8')
17 comment = {}
18
19 # job id to which comment applies
20 comment["job_id"] = data["job_id"]
21
22 # actual comment text
23 comment["body"] = data["body"]
24
25 # comment creation time
26 comment["ctime"] = data["ctime"]
27
28 # custom data from job (if any)
29 custom_data = data["custom_data"] if "custom_data" in data else None
30
31 print(comment)
32 print(custom_data)
33else:
34 print("fail")