はじめに
本記事は、TROCCO&COMETA Advent Calendar 2025の12日目の記事になります。
TROCCOでは、昨季(2024/11~2025/10)に転送元の大幅な拡充を進めてきました。これによってデータを取得できる対象は広がってきましたが、一方で従来からあるデータベース/ストレージやMA/SFAなどだけでなく、広告オーディエンスリスト連携といったデータによる業務の自動化を進めていくデータアクティベーションの領域にも対応を広げています。
その一環として、2025/12/11に独自の転送先コネクタを作成できる転送先カスタムコネクタ(*)がリリースされました。
これまで「Connector Builder」と呼ばれていたものが、「カスタムコネクタ」と名称が変更になり転送先の機能が追加されています。
転送先カスタムコネクタについては以下の記事で概要を説明しています。
さて、転送先カスタムコネクタでデータを送るときには、
- 1レコード1リクエスト(単一リクエスト)
- 複数レコード1リクエスト(一括リクエスト)
の2つの方法があるのですが、概要記事では前者を取り上げているため、本記事では後者の例としてLINE Messaging APIを利用したLINE公式アカウントからのメッセージ送信について取り上げます。
こんな方におすすめ
- 転送先カスタムコネクタの概要を知りたい方
- 転送先カスタムコネクタを使うことによって何ができそうかを考えたい方
- 一括リクエストの設定方法を確認したい方
本記事でご紹介する機能は執筆時点のものであり、機能拡充に伴い仕様が変更される可能性があります。
LINE公式アカウントからメッセージを送信する
今回の例は、LINE公式アカウントで、友だち登録されている特定のユーザーのみに限定してメッセージを送信する方法です。以下のようにメッセージが送付できます。
なお、これとは別にユーザー指定せずメッセージ配信することもできるので、実際には一斉配信とセグメント別配信を使い分けすることになりそうです。
LINEの側の事前準備をする
事前にLINE公式アカウントを開設します。私は過去にやっていましたが、設定は短時間で進めることができます。
公式アカウントが開設できたら、チャネルのなかのMessaging APIのタブで、チャネルアクセストークンが発行できます。これを接続情報で利用します。
また、Webhook設定については後述します。
ユーザーID取得用のGoogle Apps Scriptを設定する
今回メッセージ送信に利用するエンドポイントは以下のものになります。
ここで、メッセージ送信をするときに指定するユーザーIDは、スマホのアプリで確認できるIDとは別のものになっています。
このIDは、ユーザーがメッセージを送ったり友だち追加したりといったイベントが発生したときのWebhook経由でしか取得できないという仕様になっているため、Webhook経由でIDを取得するための処理をGoogle Apps Scriptで作成します。以下のコードで作成し、ウェブアプリとしてデプロイしてください。これで指定したスプレッドシートにデータが登録されるようになります。
function doPost(e) {
// SHEET_URLはスクリプトプロパティに登録しておく
const SHEET_URL = PropertiesService.getScriptProperties().getProperty('SHEET_URL');
const sheet = SpreadsheetApp.openByUrl(SHEET_URL).getSheetByName('webhook_logs');
try {
const payload_json = JSON.parse(e.postData.contents);
sheet.appendRow([
new Date(),
JSON.stringify(payload_json),
null
]);
return ContentService.createTextOutput('Ok');
} catch (error) {
sheet.appendRow([
new Date(),
null,
'Error: ' + error.toString()
]);
return ContentService.createTextOutput('Error');
}
}
ここで公開したときのURLをLINEのWebhook URLに設定してください。
なお、Google Apps Scriptの仕様上302(リダイレクト)のレスポンスを返すので「検証」として実行してもエラーの表示が出てきますが、Webhookとしては正常に動作します。スプレッドシートにデータが登録されていれば問題ありません。
BigQueryの外部テーブルを作成する
取り回しをよくするために、上で作成したデータに対して外部テーブルを設定しておきます。
create or replace schema `raw_line`
options (
location = 'asia-northeast1'
);
create or replace external table `raw_line.raw_line__webhook_logs`
(
timestamp timestamp,
payload_json string,
error_message string
)
options (
format = 'google_sheets',
uris = ['https://docs.google.com/spreadsheets/d/********/'],
sheet_range = 'webhook_logs!A:C',
skip_leading_rows = 1
);
事前の設定はこれで完了です。続いてカスタムコネクタの設定に入ります。
カスタムコネクタを作成する(基本情報)
各種項目を設定していきます。認証種別はAPIキーを選択します。
この段階で一度保存し、次は接続情報を作成します。
接続情報を作成する
APIキーや認証トークンとしてチャネルアクセストークンを入力します。
カスタムコネクタを作成する(エンドポイント)
再度保存していたカスタムコネクタの編集画面に戻り、エンドポイントを追加します。今回は「マルチキャストメッセージを送る」のエンドポイントを利用するので、作成API/一括リクエストを選択します。
- 名前: 任意
- 操作種別: 作成API
- リクエストタイプ: 一括リクエスト
- バッチサイズ: 100
- パス: /v2/bot/message/multicast
- HTTPメソッド: POST
- リクエストテンプレート:
リクエストは以下のような形で送る必要があります。
curl -v -X POST https://api.line.me/v2/bot/message/multicast \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-H 'X-Line-Retry-Key: {UUID}' \
-d '{
"to": ["U4af4980629...","U0c229f96c4..."],
"messages":[
{
"type":"text",
"text":"Hello, world1"
},
{
"type":"text",
"text":"Hello, world2"
}
]
}'
そこで、テンプレートは以下のような形にします。ユーザーIDを配列にして送るほか、メッセージを共通で持たせて1レコード目のものだけを保持させます。
{
"to": [
{% for row in rows -%}
"{{ row.userId }}"
{%- unless forloop.last -%}
,
{%- endunless -%}
{%- endfor %}
],
"messages": [
{% for row in rows -%}
{%- if forloop.first -%}
{
"type": "text",
"text": "{{ row.message }}"
}
{%- endif -%}
{%- endfor %}
]
}
- HTTPヘッダ: Content-Type: application/json
Backlogと同じく接続確認ができますが、ここでは省略します。
ここまでできればカスタムコネクタの作成は完了です。
転送設定を作成する
続いて、転送設定を作成し転送ジョブを実行します。転送元BigQuery→転送先カスタムコネクタとして転送設定を作成します。
SQLは以下の通りで、Webhookで取得したイベントログからユーザーIDを取得しています。
select distinct
json_value(event, '$.source.userId') as userId,
'これはTROCCOの転送先カスタムコネクタで送信されたメッセージです!' as message
from
`raw_line.raw_line__webhook_logs`
left join
unnest(json_query_array(parse_json(payload_json).events)) event
where
json_value(event, '$.source.userId') is not null
モードには「追記(INSERT)」のほか「UPSERT」がありますが、これは別記事で取り上げています。
プレビューに進むと、カスタムコネクタで設定したテンプレートの通りにリクエストで送られるデータが表示されます。
問題なければこれで保存します。
データを転送する
保存した転送設定を実行します。無事成功です!
実際、LINEにメッセージが送付されています!
おわりに
LINEでのメッセージ配信としては、ユーザーIDの取得方法が独特なため良い感じに運用していくにはもう少し工夫が必要になりますが、一括リクエストの設定方法の例として、他のサービスでの使い方をぜひ検討してくださいませ!












