カゴ落ち挽回のほとんどはメールです。電話がけは勝手が違います。判断を要する のは電話だけだからです。すでに買った人へのメールは目をつむれる範囲ですが、 電話は双方にとって気まずい一分になります。
だからこのガイドの大半は発信の話ではありません。その前に満たされているべき こと全部の話です。実際のチェックアウトが存在すること、本当に買っていないこと、 相手の深夜でないこと、電話をやめてくれと頼まれていないこと、そして名前を呼んで 電話を始められるだけ名前を知っていること。
30分ほど見込んでください。その大半はShopifyでの操作で、ここではありません。
短い要約
- Shopifyアプリを作成し、4つの権限にチェックを入れ、インストールする
- Shopifyから2つの異なるシークレットをコピーする
- 両方をOmni Octoに接続として保存する
- Octoにフローの構築を頼む
- Webhookアドレスをコピーして、Shopifyに2回貼り付ける
- 待ち時間1分でテストする
つまずきやすいのはステップ1と5です。それぞれに独立したセクションがあります。
ステップ 1 — Shopifyアプリを作成してインストールする
Shopifyで:設定 → アプリと販売チャネル → アプリを開発 → アプリを作成。 後で見分けられる名前を付けてください。
この権限にチェックを入れる
設定 → Admin APIの統合 → 設定 を開き、以下を許可します:
| 権限 | 目的 |
|---|---|
read_orders | 買い手が結局購入したかどうかの確認 |
read_all_orders | 60日より古い注文に対する同じ確認 |
read_customers | 名前と電話番号 |
read_products | カートに入っていた内容の読み取り |
チェックアウト権限を探しても見つかりません。 read_checkoutsは存在
しますが、Shopifyはこれを保護対象として扱います。チェックできる一覧には
現れず、要求にはShopify本体の承認が要ります。これなしでチェックアウトAPIを
呼ぶと、Shopifyはこう答えます:
This action requires merchant approval for
read_checkoutsscope.
問題ありません。そしてこのフローがチェックアウトを読まない理由がそれです。
代わりにもっと良い質問をします — 注文は現れたか? — これはread_orders
だけで足ります。
インストールする
全員が忘れるステップはこれです。 アプリを設定しても、アプリの概要ページで アプリをインストールを押すまでは何も起きません。押すまで、コピーすべき Admin APIアクセストークンは存在せず、以降のすべてのステップが別の何かが壊れて いるように見える失敗をします。
2つのシークレットをコピーし、混ぜない
2つの異なるものが必要で、どちらもランダムな文字列に見えるため混同しやすい です。
| 対象 | 場所 | 役割 |
|---|---|---|
| Admin APIアクセストークン | インストール後のアプリのAPI資格情報タブ。shpat_で始まる | Omni OctoがShopifyに問い合わせるためのもの |
| Webhook署名シークレット | 設定 → 通知 → Webhook、ページの下部 | Omni OctoがShopifyの送信メッセージを検証するためのもの |
1つはShopifyとの対話用。もう1つはShopifyが本当に送ったことを確認するため。 混ぜるのがこのセットアップで最も高くつく失敗で、症状は原因と少しも似ていませ ん — 何も起こらないときを参照してください。
ステップ 2 — 両方のシークレットをOmni Octoに保存する
連携ページを開き、1つずつ追加します。
Admin APIアクセストークン。 新しい連携を押し、その他の下にある
HTTP / API キーのカードを選びます。shpat_トークンを貼り付けて
ください。一覧で見分けられる名前を付けます — 「Shopify」より「Shopify Admin API
トークン」のほうが良いです。
Webhook署名シークレット。 もう一度新しい連携を押し、Signing secretを選んで、通知ページのシークレットを貼り付けます。フォームに、 覚えておく価値のあることが書かれています:
The secret the sender signs with, not a key you call them with.
2つの接続、2つの方向です。何かを作る前に両方保存してください。
ステップ 3 — Octoにフローを作らせる
自動化を書くのはあなたではありません。チャットを開いて、買い手を連絡先として 保存する部分も含めて、やりたいことを説明します:
私のShopifyストアで誰かがカートを放棄したら、30分ほど待ってから電話をかけて。 その前に、名前と電話番号と一緒に連絡先として保存して、エージェントが名前を 呼んで挨拶できるようにして。+1 555 0100から、私のShopify Cart Recovery エージェントを使ってかけて。
連絡先の部分をきちんと言ってください。 それがなくてもOctoは動くフローを 作りますが、挨拶はShopifyのメッセージではなく連絡先レコードから名前を取る ため、エージェントは「サラさん、こんにちは」ではなく「こんにちは」で口を 切ります。これを指定することが、挽回の電話と冷たい電話を分けるものです。
Octoは接続を読み、エージェントを見つけ、署名シークレットを2つ以上保存して いればどれを使うか聞いてくることがあります。Adminトークンではなく署名 シークレットで答えてください。
そして「有効」と表示されていることを確認します。 下書きのままのフローは Shopifyが送るものすべてを拒否し、Shopifyの配信ログは、まるでアドレス違いと いうような失敗で埋まります。
ステップ 4 — Shopifyにアドレスを渡す
フローを開き、図の上にあるWebhook endpointカードを探します。アドレスと ステータスが表示されています:
- Ready — 公開中で、署名シークレットが保存されている
- Inactive — 一時停止中かまだ下書きなので、Shopifyのメッセージは拒否される
Copyを押します。次にShopifyで、設定 → 通知 → Webhook → Webhookを 作成と進み、同じアドレスを貼って2つ作成します:
| イベント | フォーマット | 理由 |
|---|---|---|
| チェックアウトの作成 | JSON | 誰かがチェックアウトに達したときに発火 |
| チェックアウトの更新 | JSON | 追加情報を入力したときに発火 |
なぜ2つか、平たく言うと
Shopifyは誰かがチェックアウトを始めた瞬間に知らせますが、それは電話番号を 打つ前であることが多いです。入力が進むたびに再度知らせてきて、その後発の メッセージの1つに番号が載っている、というのが通例です。
最初の1つだけ購読すると、かける相手のいないフローができます。両方購読すれば、 かける相手がいます。
同じドロップダウンにはカートの作成もあります。それらしい響きですが、 違います。カートはただの買い物かごで、Shopifyにはメールも電話も名前もない ため、かける相手がいません。Webhookが届いているかどうかの無害なシグナルが 欲しいときにだけ使ってください。
これらのWebhookはShopify管理画面のこのページで、手作業で作成してください。 Shopify API経由で作らないでください。両方試しました。このページで作ったもの は30秒ほどで届きました。API経由で作ったものは1時間以上経っても一度も届か ず、どちらの場合もShopifyはエラーを出しませんでした。
どちらかでテストを送信を押してください。1分以内に、フローの実行一覧に 何かが現れるはずです。この1クリックが接続の動作を証明する最速の方法で、 コストはゼロです。
ステップ 5 — 1分でテストする
Octoに待ち時間を1分に変えてもらいます。
まず、自分の電話番号を顧客レコードに登録します。 Shopifyで:顧客 → 自分のメールの顧客を選ぶか作成 → 電話番号を追加して保存。
購入の前にやってください。チェックアウトページに電話番号を打ち込むだけでは 不十分です — Shopifyの1ページチェックアウトには支払い前に送信するステップが なく、そこで打った番号はShopifyに届かない可能性があります。私たちはこれで 一晩を失いました。顧客レコードの番号は最初のメッセージからチェックアウトと 一緒に運ばれ、それがテストを成立させます。
それから:
- その顧客としてストアフロントにログインする
- 何かをカートに入れる
- チェックアウトに進み、ページを読み込ませる
- タブを閉じる
Shopifyがメッセージを配信してから1分ほどで、自分の電話が鳴るはずです。 チェックアウトフォームに何も入力する必要はありません。
その後、Octoに待ち時間を30分に戻してもらってください。 1分のままだと、 カード番号を打ち込んでいる最中の人に電話がかかります。
何も起こらないとき
これが、私たちが当初あれば欲しかったセクションです。上から順に — 各項目は、 実際にテストを止めたものです。
フローに何も届かない
アプリをインストールを押しましたか? 権限の設定はインストールでは ありません。
WebhookはAPI経由ではなく、Shopify管理画面で作りましたか? 上を参照。 これが断トツで時間を食われました。
フローは有効ですか? 下書きはすべてを拒否します。
フローを作成または編集したばかりですか? 数分待ってください。新しい フローは、登録されるまでの短い間「まだ準備ができていない」と応答し、Shopifyは 自動で再試行します。
まずShopify自身の配信ログを確認してください。 作成したWebhookのページに あります。Shopifyが配信を表示していなければ、問題は回線の向こう側にあり、 Omni Octoのどこを見ても説明は得られません。
Shopifyは送るが、フローが拒否する
ほぼ常にシークレットの間違いです。どちらが署名するかはWebhookの作り方に よりますが、それは自明ではありません:
| Webhookの作成場所… | 署名に使われるもの |
|---|---|
| 通知ページで手作業で | 同じページにある署名シークレット |
| アプリからAPI経由で | そのアプリ自身のAPIシークレットキー |
このガイド通りに進めたなら、必要なのは1行目です。フローをステップ2の署名 シークレットの接続に向けてください。
フローは始まるが、誰にも電話がかからない
電話番号はありましたか? 実行を開き、何が届いたかを見てください。番号が なければ電話はありません。設計上そうです。
カートに追加するだけでは足りません。 カート単体ではShopifyに何も伝え ません。チェックアウトページに到達し、かつShopifyが相手に連絡する手段を 持っている必要があります — ログイン中のアカウントか、入力された内容です。
電話番号を打つことと送信することは別です。 Shopifyの1ページチェックアウト には支払い前の「続行」ボタンがなく、打った番号はShopifyに届かない可能性が あります。確実な修正が次の項目です。
顧客レコードに電話番号を登録してください。 Shopifyで:顧客 → その 人物 → 電話番号を追加。ログイン中の買い手の番号は、最初のメッセージから チェックアウトと一緒に運ばれ、上のどの問題も関係なくなります。私たち自身の テストを成立させたのは、この変更だけでした。
SMSでのログインはカウントされません。 Shopifyがログインコードを送った 番号は、Shopifyのログインシステムのものです。顧客レコードには届かず、使え ません。
試用期間またはパスワード保護されたストアでのテスト
自分のストアで購入するにはストアのパスワードが要ります。 オンラインストア → 各種設定 → パスワード保護にあります。
onlineStoreUrlを商品の公開サインとして信用しないでください。 パスワード
保護されたストアでは、公開・非公開にかかわらずすべての商品で空だと報告
されます。私たちは、公開済みの商品を公開し直して時間を無駄にしました。
パスワード付きで商品ページを開いて、自分の目で確かめてください。
電話を止めるもの
4つのチェックです。それぞれは、失敗ではなく、実行が静かに、しかるべき理由で 終わる場所です。その後に見える表示が異なるので、どれがどれか知っておく価値が あります。
購入していた。 待ち時間の後、そのチェックアウトに注文が存在するかを Shopifyに尋ねます。存在すれば実行は停止します。待ち時間が存在する理由の すべてがこれです。Shopifyはメールアドレスが打たれた瞬間にチェックアウトを 放棄扱いにしますが、それはまだカードを取り出そうとしている最中であることが 多いのです。
判別できなかった。 この確認が失敗した場合 — トークンの期限切れ、権限の 取り下げ、ネットワークの問題 — 実行は電話をかけずに停止します。逆に推測して かければ、支払い済みの人に電話をかけることになります。
この2つはどちらも最初のステップの前に起きます。確認がトリガーの一部だから です。そのため、こうして止まった実行は、ステップなしで完了として表示 されます — 何も保存されず、誰にも発信されていません。現時点では、実行画面は どちらだったのかをまだ書き出しません。ステップなしで完了する実行が続いて 電話を期待していた場合は、まずAdmin API接続を確認してください。
相手の深夜です。 発信可能時間は電話番号の国コードから決まり、タイム ゾーンに置けない番号にはかけません。複数のゾーンにまたがる国では、その すべてで昼間である必要があります。
停止の依頼がありました。 その番号の「電話しない」登録は、発信前に 電話をブロックし、実行は失敗ではなく拒否を記録します。
この方法でできないこと
ShopifyのWebhookは作成されません。 アドレスを貼り付けるのはあなたで、 2回です。
電話番号は捏造されません。 番号がなければ、電話もありません。
挽回の電話は「少なくとも1回」であり、「ちょうど1回」ではありません。 Shopifyは買い手が何かを変更するたびにメッセージを送り、それぞれが独自の 実行を開始します。それらの実行は突き合わされるので、通常は1回の電話になり ますが、メッセージ間の間隔が十分長いと2回目が発生することもあります。実際の 顧客に向ける前に知っておくべきことです。
APIバージョンを最新に保ってください。 Admin API接続には、使うShopify APIのバージョンが記録されます。Shopifyは各バージョンを1年ほどサポートした 後、知らせずに古いバージョンで応答するようになります。1年経っていたら、 更新してください。