BrazeとOpenAIを使ってユーザー毎の面白メッセージを自動配信する

BrazeのコネクテッドコンテントとOpenAIを使ってユーザー情報に合わせた面白メッセージを作成してみる
2023.04.07

Brazeブロガーの國崎です。
今回はBrazeのコネクテッドコンテントにOpenAIのAPIを連携させて、ユーザー毎に生成されたサンクスメッセージを自動配信するをやってみました。

前提条件

今回の記事は以下前提条件のもとに検証を行っています。

  • Brazeにユーザー属性情報を取り込み済み
  • Brazeでメッセージの作成〜配信までを行える
  • OpenAIのAPIを取得している

上記が行えていない方はこれらを満たした上で挙動確認をしていただければと思います。

サンクスメッセージの作成

今回はBrazeのキャンペーン→アプリ内メッセージでサンクスメッセージの作成をしてみます。
アプリ内メッセージにコネクテッドコンテントでOpenAIのAPIをコールする記述を書きます。

以下は記述したコネクテッドコンテントのコードですが、注意点としてはjson形式の記述をbodyに書き込む際、{% capture postbody %}で変数化をしないといけません。

{% capture postbody %}
{
  "model": "gpt-3.5-turbo",
  "messages": [{"role": "user", 
  "content": "60文字以内の日本語で、アクセサリーを買ってくれた人にお礼を言ってください。"}]
}
{% endcapture %}

messagesのcontentには生成したいメッセージの指示を書きます。
今回の指示はアクセサリーを買った人向けのお礼メッセージの生成です。

上の記述を最初に書き、次に下の記述を書きます。

{% connected_content https://api.openai.com/v1/chat/completions
:method post
:body {{postbody}}
:headers {
 "Content-Type": "application/json",
 "Authorization": "Bearer APIkey"
}
:save result
%}

{{result.choices[0].message.content}}

APIkeyには各自のkeyを書きます。

実際に端末にテスト配信すると以下のメッセージが確認できました。 コネクテッドコンテントai1

属性情報毎にメッセージ内容を変えてみる

OpenAIを使ったメッセージ生成ができることは確認できたので、ここからはコネクテッドコンテントならではの機能であるパーソナライズ化したメッセージ生成ができるかも試してみます。

以下3つのアカウントを用意します。

テストユーザーA

  • 名前:くらにゃん
  • カスタム属性:猫

テストユーザーB

  • 名前:関西人
  • カスタム属性:大阪

テストユーザーC

  • 名前:ジョータロー
  • カスタム属性:JOJO

テストユーザーAには「にゃん言葉」、テストユーザーBには「関西弁」、テストユーザーCには「JOJOっぽい言葉」でサンクスメッセージを出し分けるということをやってみます。

コネクテッドコンテントには以下のように記述します。

{% capture postbody %}
{
  "model": "gpt-3.5-turbo",
{% if {{custom_attribute.${test_attribute_string}}} == "猫" %}
  "messages": [{"role": "user", "content": "60文字以内のニャン言葉で、アクセサリーを買ってくれた人にお礼を言ってください。"}]
{% elsif {{custom_attribute.${test_attribute_string}}} == "大阪" %}
  "messages": [{"role": "user", "content": "60文字以内の関西弁で、アクセサリーを買ってくれた人にお礼を言ってください。"}]
{% elsif {{custom_attribute.${test_attribute_string}}} == "JOJO" %}
  "messages": [{"role": "user", "content": "60文字以内のJOJO風の言葉で、アクセサリーを買ってくれた人にお礼を言ってください。"}]  
{% else %}
  "messages": [{"role": "user", "content": "60文字以内の日本語で、アクセサリーを買ってくれた人にお礼を言ってください。"}]
{% endif %}
}
{% endcapture %}
{% connected_content https://api.openai.com/v1/chat/completions
:method post
:body {{postbody}}
:headers {
 "Content-Type": "application/json",
 "Authorization": "Bearer APIkey"
}
:save result
%}
{{${user_id} | default: 'お客様'}}さん
{{result.choices[0].message.content}}

このメッセージを以下の条件で配信します。

  • 購買後にアプリ内メッセージで配信
  • ほぼ購入完了と同時に画面上で表示

さてさて、どんなメッセージが配信されるかにゃ。

配信されたメッセージ

以下各ユーザー毎に配信されたメッセージです。

くらにゃんに配信されたメッセージ

コネクテッドコンテントai2
にゃん言葉で指示するとこういう言葉になるニャン。

関西人に配信されたメッセージ

コネクテッドコンテントai3
ありんす!って関西弁なのか?

ジョータローに配信されたメッセージ

コネクテッドコンテントai4
ゴゴゴゴ!はjojoっぽいね。

検証を兼ねて思ったこと

今回一通り試して感じたことを以下にまとめておきます。

  • 普通のメッセージ作成を指示する分には問題なさそう
  • 言葉に誤りが許されない配信で使うのはリスクありそう
  • メッセージにクセをつけようとすると精度が怪しくなる
  • 毎回違うメッセージが配信されるので面白みはある
  • キャラを立てて使えば変な言葉も遊びとして捉えてもらえそう
  • 指示する言葉で色々な使い道がありそう

ってなところです。

今回配信したのはBrazeのアプリ内メッセージだったので、コード内に:retryは活用しませんでしたが、プッシュ通知の配信などでは活用をした方がよさそうです。
またコネクテッドコンテントは2秒以内に応答がないとメッセージ配信が中止になってしまうので、メッセージ生成に時間がかかる複雑な指示はそもそもの配信ができない場合もありえます。

ただこの辺はOpenAIのパラメーター記述を調整したり、今後のAPIアップデートなどでクリアできるやり方はありそうだなと感じました。
ちなみにコネクテッドコンテントのコード生成にはChatGPTを使えば、修正箇所を教えてくれたりするので何かと便利です。

BrazeとChatGPTの使い方については以下記事でも紹介してます。

ChatGPTを使ってBrazeで何ができるか?色々試してみる