Crescendo Lab ドキュメント デプロイ
日本語
無料で始める

HTTP API

MCP を使わないプログラム向けの LINE Agent SDK HTTP API。LINE 接続の作成、各ステップが誰の番かの確認、公開後のメッセージ送信ができ、AI ツールは認証情報に触れません。

最終更新

ベース URL#

API は自分で動かすサービスの下にあり、パスはすべて /api で始まります:

text
https://line-oa-mcp--<組織>.hosting.agentlab.run/api

動かし方は Agent Lab で LINE OA MCP を動かすを参照してください。

MCP のほうが簡単です

MCP に対応した AI ツール(Claude Code、Codex、Cursor)は LINE OA MCP を使えます。ツールはこの API と同じことをします。動いているサービスは /agent.md で AI 向けの説明も返します。

認証#

/api へのリクエストにはすべて Agent トークンが必要です。Google でコントロールパネルにログインし、Agent トークン ページ(/tokens)で作成します:

http
Authorization: Bearer <Agent トークン>

ない、違う、または取り消されている場合は 401 を返します。トークンの表示は一度だけで、不要になったら同じページで取り消します。

トークンを会話に貼らない

トークンは AI ツールの環境変数(たとえば LINE_AGENT_SDK_TOKEN)に入れてもらい、会話には貼らないでください。Channel Secret も、サービスのページでだけ入力します。

1. 接続を作る#

メソッドとパス用途
POST /api/connections既存の LINE 公式アカウントへの接続を作成します。人に渡す setupUrl を含む接続を返します。
GET /api/connections接続を一覧にします。
GET /api/connections/{id}接続の現在の状態を読みます。読むたびに、人が LINE 側で作業を終えたかも確認します。
http
POST /api/connections
Content-Type: application/json

{ "workspace": "acme", "label": "サポート用アカウント" }

どちらの項目も省略できます。返ってきた setupUrl を人に渡してください。Channel ID と Channel Secret はそのページでだけ入力します。

2. 各ステップの完了を待つ#

接続の nextStep は、いま誰の番か、何をするか、どうなれば完了かを示します:

json
{
  "id": "conn_9f3a1c2b4d5e",
  "state": "webhook_active",
  "live": false,
  "nextStep": {
    "key": "webhook_active",
    "title": "打開「Use webhook」",
    "actor": "human",
    "status": "current",
    "doneWhen": "LINE 回報 webhook active = true(每 2 秒自動偵測,不用回來按)",
    "how": "LINE Developers › Messaging API › Webhook settings › Use webhook 打開。",
    "url": "https://developers.line.biz/console/"
  }
}
  • actor が human のときは、title、how、url を人に伝えて、接続を読み続けます。ステップは自動で完了するので、「終わりましたか」と聞く必要はありません。
  • actor が ops のときは、サービスの運営側が対応中です。対応中だと人に伝えます。
  • actor が agent のときは、サービスが自分で行います。
  • status が error のときは、理由が note に入ります。

2〜5 秒ごとに読むことをおすすめします。live が true になれば、最初の LINE メッセージが人のスマートフォンに届いています。ステップのタイトルや説明は繁体字中国語です。

ステップ

key誰が完了の条件
credentials本人Channel ID と Channel Secret でトークンを発行できる。
health自動アカウント情報、チャットモード、Webhook、上限、友だち数を読み取る。設定は変えない。
mode本人サービスのページで、送信のみ・転送・直接引き継ぎのいずれかを選ぶ。
webhook_set自動Webhook URL をこのサービスに設定し、読み戻して確認する。
webhook_active本人LINE Developers で「Use webhook」をオンにする。自動で検知される。
auto_reply本人OA Manager で自動応答メッセージをオフにし、サービスのページで確認する。
pair本人友だち追加して pairingCode を送る。
first_message自動ペアリングメッセージへの応答が受け付けられる。

送信のみを選ぶと、webhook_set、webhook_active、auto_reply は skipped になり、pair はテスト用の userId を貼り付ける手順に変わります。転送を選ぶと auto_reply は省略され、既存システムの設定はそのままです。

3. メッセージを送る#

メソッドとパス用途
POST /api/connections/{id}/messagesペアリング済みのテストユーザーにテキストをプッシュ送信します。
http
POST /api/connections/conn_9f3a1c2b4d5e/messages
Content-Type: application/json

{ "text": "ご注文の商品を発送しました" }
json
{ "ok": true, "to": "paired test user" }

接続がまだ公開されていないときは、nextStep とともに 409 を返します。

プッシュは上限を使います

プッシュメッセージは公式アカウントの月間上限に数えられ、応答メッセージは数えられません。テストユーザーが公式アカウントにメッセージを送ると Agent は応答で答え、応答トークンの期限が切れた場合だけプッシュに切り替えます。

サンドボックス#

公式アカウントがないときは、運営側が用意した共有サンドボックスで試せます:

メソッドとパス用途
POST /api/sandboxjoin コードを取得します。joinText(たとえば join blue-fox-42)とサンドボックスの account.addFriendUrl を返します。
GET /api/sandbox/{id}サンドボックスの状態を読みます。live が true なら最初のメッセージが届いています。

addFriendUrl と joinText を人に渡します。友だち追加してその 1 行を送ると、スマートフォンがワークスペースに結び付きます。サンドボックスは join したスマートフォンにしか送れず、友だち関係は本番のアカウントには引き継がれません。

接続オブジェクト#

項目意味
id接続 ID。以後の呼び出しで使います。
stateいまのステップの key。すべて終われば live。
live最初のメッセージが届いたら true。
modepush_only、relay、direct。まだ選んでいなければ null。
account公式アカウントの basicId、displayName、addFriendUrl。確認が終わるまでは null。
pairingCodeスマートフォンから送るペアリングコード。たとえば AL-7Q4K。
testerペアリング済みテストユーザーの userId。
webhookUrlこの接続の Webhook URL。サービスが自分で LINE に登録します。
setupUrl人に渡すコントロールパネルのページ。
stepsすべてのステップ。それぞれ key、title、actor、status、doneWhen と、場合により how、url、note を持ちます。
nextStepいま取り組むステップ。すべて終われば null。

エラー#

ステータス意味対応
400リクエストが正しくない。たとえば text が空。理由は error に入ります。直して送り直します。
401トークンがない、違う、または取り消されている。Authorization: Bearer <Agent トークン> を確認します。
404その接続やサンドボックスが見つからない。id を確認します。
409接続がまだ公開されておらず、送信できない。返ってきた nextStep に従って続けます。

Webhook#

POST /hooks/line/{id} は LINE プラットフォームが呼び出すものです。トークンは不要ですが、すべてのリクエストが x-line-signature の検証を通る必要があり、通らなければ 401 を返します。この URL はサービスが webhook_set のステップで自分で LINE に登録するので、手で貼り付ける必要はありません。