3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TROCCOの転送先カスタムコネクタでLINE公式アカウントからメッセージを送信する

3
Last updated at Posted at 2025-12-11

はじめに

本記事は、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公式アカウントで、友だち登録されている特定のユーザーのみに限定してメッセージを送信する方法です。以下のようにメッセージが送付できます。

image.png

なお、これとは別にユーザー指定せずメッセージ配信することもできるので、実際には一斉配信とセグメント別配信を使い分けすることになりそうです。

LINEの側の事前準備をする

事前にLINE公式アカウントを開設します。私は過去にやっていましたが、設定は短時間で進めることができます。

公式アカウントが開設できたら、チャネルのなかのMessaging APIのタブで、チャネルアクセストークンが発行できます。これを接続情報で利用します。

また、Webhook設定については後述します。

image.png

ユーザー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としては正常に動作します。スプレッドシートにデータが登録されていれば問題ありません。

image.png

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キーを選択します。

image.png

この段階で一度保存し、次は接続情報を作成します。

接続情報を作成する

APIキーや認証トークンとしてチャネルアクセストークンを入力します。

image.png

カスタムコネクタを作成する(エンドポイント)

再度保存していたカスタムコネクタの編集画面に戻り、エンドポイントを追加します。今回は「マルチキャストメッセージを送る」のエンドポイントを利用するので、作成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

image.png

Backlogと同じく接続確認ができますが、ここでは省略します。

ここまでできればカスタムコネクタの作成は完了です。

転送設定を作成する

続いて、転送設定を作成し転送ジョブを実行します。転送元BigQuery→転送先カスタムコネクタとして転送設定を作成します。

image.png

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

image.png

image.png

image.png

モードには「追記(INSERT)」のほか「UPSERT」がありますが、これは別記事で取り上げています。

プレビューに進むと、カスタムコネクタで設定したテンプレートの通りにリクエストで送られるデータが表示されます。

image.png

問題なければこれで保存します。

データを転送する

保存した転送設定を実行します。無事成功です!

image.png

実際、LINEにメッセージが送付されています!

image.png

おわりに

LINEでのメッセージ配信としては、ユーザーIDの取得方法が独特なため良い感じに運用していくにはもう少し工夫が必要になりますが、一括リクエストの設定方法の例として、他のサービスでの使い方をぜひ検討してくださいませ!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?