Outroユーザーガイド
ブランド化されたキャンセルページの作成から収集した退出インタビューの活用まで、Outroの使い方を完全にスクリーンショットで解説。
Outroへようこそ
Outroはキャンセルフローを音声退出インタビューに変えます。ブランド化されたキャンセルページを作成し、「サブスクリプションをキャンセル」ボタンをそこに向け、解約するすべての顧客にキャンセル完了前に1つの質問を自分の言葉で答えてもらいます。
各音声回答は自動的に文字起こしされ、あなたの言語に翻訳され、感情をスコアリングされ、テーマでタグ付けされます。すべてがダッシュボードに集約され、週次ダイジェストにまとめられます。これで人々がなぜ去るのか、単に去ったというだけでなく、理由がわかります。
学ぶこと
- 数クリックでブランド化されたキャンセルページを作成する方法。
- ロゴ、色、質問プロンプト、ボタンのコピーを設定する方法。
- キャンセルする顧客を取り戻すリテンションオファーを追加する方法。
- ページを埋め込むか、キャンセルボタンをそこに向けて顧客をリダイレクトする方法。
- StripeとLemon Squeezyを接続し、すべてのキャンセルにリスクのあるプランとMRRを持たせる方法。
- 回答を読み、収益回復で保存したMRRと失ったMRRを追跡する方法。
- AIサマリーと週次キャンセルダイジェストが顧客の声をどのように要約するか。
- チーム、プラン、請求を管理する方法。
クイックスタート - 5分でライブへ
ざっと目を通したい場合は、サインアップから実際の退出インタビュー収集までの最短ルートはこちら。
アカウントを作成
サインアップをクリックし、メールアドレスを入力、パスワードを設定し、送信されたメールで確認します。すべてのアカウントは14日間のトライアルから始まります。
キャンセルページを作成
ダッシュボードからキャンセルページ → 新しいページに進み、スラッグを選択し(ページはoutro.so/c/your-slugにあります)、解約する顧客に答えてもらいたい1つの質問を書きます。
ブランディング(オプション)
ロゴ、ブランドカラー、ページタイトル、ボタンのコピーを追加します。後でいつでも調整可能で、ライブページは即座に更新されます。
請求プロバイダーを接続(オプション)
アカウント設定 → 統合で、StripeまたはLemon Squeezyを接続します。Outroは顧客のプラン、サブスクリプション年齢、リスクのあるMRRをすべてのキャンセルに添付します。これにより、解約を単なる数ではなく、金額で測定できます。
キャンセルフローを接続
ページをアプリに埋め込むか、既存の「サブスクリプションをキャンセル」ボタンをOutroリンクに向け、許可されたリターンドメインを設定して顧客がキャンセルを完了するために戻るようにします。
回答が集まるのを見守る
各回答は回答タブに表示され、自動的に文字起こしされ、スコアリングされます。収益回復は保存したMRRと失ったMRRを追跡し、キャンセルダイジェストが毎週月曜日に受信トレイに届きます。

キャンセルページの作成
キャンセルページは、顧客がキャンセルをクリックしたときに表示されるブランド化された画面です。プランが許可する限り、いくつでも作成できます。たとえば、製品ごとやプラン階層ごとに異なるページを持ち、それぞれに独自の質問を設定できます。
1. キャンセルページを開く
サイドバーからキャンセルページをクリックします。所有するすべてのページが表示され、それぞれに公開URL、ライブ/無効ステータス、クイックアクションがあります。

2. 必要事項を記入
エディターにはいくつかのフィールドがあります。スラッグのみが必須で、他は適切なデフォルトが設定されています。
- スラッグ - 公開URLは
outro.so/c/{slug}です。小文字、数字、ダッシュのみ。 - ページタイトル - 例: "お別れが寂しいです"。
- 質問プロンプト - 顧客が音声で答える1つの質問、例: "キャンセルの主な理由は何ですか?"
- スキップ / 続行ボタンのテキスト - スキップとキャンセル続行ボタンのコピー。

ページのブランディング
ページはあなたの製品のように感じられるべきです。外観タブでレイアウト(全画面、分割、カード)を選び、背景、ブランドカラー、カードスタイル、ロゴを設定します。変更は行うとすぐにプレビューに反映されます。
ロゴ & ブランドカラー
ホストされたロゴURLを貼り付けてページ上部にマークを表示し、カラーピッカーでブランドカラーを選択(または16進値を貼り付け)。この色はアクセントバー、ボタン、録音コントロールに反映されます。

ライブ切り替え
ページがライブの切り替えは、公開URLが応答するかどうかを制御します。ページを削除せずに(およびその回答を)オフにするには、オフにします。
リテンションオファー
キャンセルは必ずしも最終決定ではありません。顧客が質問に答えた後、Outroはリテンションオファーを表示できます - 滞在するための最後のチャンスのインセンティブです。受け入れる人もいれば、通常通りキャンセルする人もいます。どちらにしても、何かを学びます。
ページエディターのオファータブを開き、リテンションオファーを有効にするをオンにします。フローはシンプルです: フィードバックをもらう → オファーを見せる → 滞在またはキャンセル。

オファーの種類
- 割引 - 顧客のサブスクリプションの割引。タイプを選択(パーセンテージ、無料月数、固定額)し、必要に応じて月次プランと年次プラン、または特定のパッケージで異なる金額を設定します。Stripeが接続されている場合、Outroは既存のサブスクリプションに自動的に適用します。そうでない場合、チームが手動で適用し、Outroは顧客に適用中であることをメールで通知します。顧客は引き換えコードを見ません。オプションの請求リンク。
- サブスクリプションの一時停止 - キャンセルせずにアプリ内の一時停止ページに送ります。
- プランのダウングレード - プランページにリンクし、より安価な階層に移動できるようにします。
- サポートに連絡 - 保存可能な顧客をメールまたはサポートリンクを介してチームに直接送ります。
理由に応じたオファーのターゲティング
各オファーは特定のキャンセル理由をターゲットにできます。マッチする方法は2つあります。
- 選択したものによる - フォームで訪問者が選択した回答にマッチ(例: "高すぎる"のラジオオプション)。
- 言ったことによる - 訪問者が音声回答を記録し、オファーが有効な場合、Outroはそれを文字起こしし、AIを使用して実際の解約理由を検出します(高すぎる、機能が不足している、使用していない、使いにくい、技術的な問題、切り替え)。その後、実際に言ったことにマッチするオファーを表示します。これはインラインで行われ、訪問者は分類中に「最適なオプションを見つける」短いポーズを見ます。
Outroはどちらかのシグナルにマッチする最初のオファーを表示します。マッチしない場合は、理由が選択されていない最初のオファーを表示します(キャッチオール)。価格が高すぎると言った顧客は、フォームに触れなくても割引を受け、"機能が不足している"はサポートにルートされます。フォームの回答と音声で検出された理由を同じオファーで混在させることができます - Outroは2つをマッピングし、フォームラベルに設定されたオファーは同等の音声理由にもマッチします。
キャンセルフローの接続
Outroをキャンセルする顧客の前に置く方法は2つあります。アプリに合う方を選んでください。
- 埋め込む - 既存のキャンセル画面に小さなスクリプトをドロップします。Outroウィジェットはフローをネイティブにレンダリングし(インラインまたはフローティングランチャーとして)、サイズを自動調整し、顧客がオファーを受け入れたときにアプリに通知します。
- リンクする - 「サブスクリプションをキャンセル」ボタンをホストされたOutro URLに向け、Outroが顧客を戻してキャンセルを完了させます。
オプションA - ページを埋め込む
エディターの統合タブからスニペットをコピーし、キャンセルフローがある場所に貼り付けます。Outroウィジェットはフローをネイティブにレンダリングし(iframeなし)、サイズを自動調整し、onOfferAcceptedハンドラーを呼び出して請求システムでリテンションオファーを適用できるようにします。
userId(およびオプションでexternalRef)をOutroWidget.initに渡します。リンクと同様に、埋め込まれたキャンセルは請求顧客にマッチするので、スナップショットされたプランとMRRは正確です。
<!-- Drop this where you want the flow. The widget renders it natively (no iframe). -->
<div id="outro-cancel"></div>
<link rel="stylesheet" href="https://widget.outro.so/outro-widget.css">
<script src="https://widget.outro.so/outro-widget.iife.js"></script>
<script>
OutroWidget.init({
slug: 'your-slug',
apiBaseUrl: 'https://outro.so',
chrome: 'inline', // 'inline' | 'floating' | 'page'
containerId: 'outro-cancel', // omit for 'floating'
userId: 'USER_ID',
externalRef: 'REF',
onOfferAccepted: function (d) {
// d.offer = pause|downgrade|discount|contact, d.responseId, d.offerUrl
// Apply the offer in your billing system here (or let d.offerUrl redirect).
},
});
</script>オプションB - 統合リンク
エディターがコピーできるリンクを生成します。それは次のようになります。
outro.so/c/your-slug?return_url=https://app.acme.com/cancel/done&user_id=USER_ID&external_ref=REF- return_url - 回答後に顧客を送る場所。許可されたリターンドメイン上でなければなりません。
- user_id - 顧客の独自の識別子。応答にマッチさせるために戻ってきます。
- external_ref - 添付したい追加のコンテキスト(プラン、MRR、サインアップ日)。応答と一緒に保存されます。
リダイレクトバック
顧客が回答を記録した後(またはスキップ/続行ボタンをクリックした後)、Outroはreturn_urlに2つのクエリパラメータを追加して送信し、アプリがキャンセルを完了できるようにします。
https://app.acme.com/cancel/done?outro_response_id=...&user_id=USER_ID許可されたリターンドメイン
エディターで許可されたリターンドメインを設定します(例: acme.com)。Outroはそのホストまたはそのサブドメインにのみリダイレクトします。
return_urlが他のホストにある場合は設計上拒否されるため、誰もリダイレクトをハイジャックできません。請求システムでのオファーの適用
受け入れられたオファーを適用する方法は2つあります。自動 - 設定で請求プロバイダー(StripeまたはLemon Squeezy)を接続し、オファーで「自動適用」をオンにします。Outroは割引、一時停止、またはダウングレードを自動的に適用します。手動 - Outroはアプリにシグナルを送るだけで、以下のコピーペーストの接着剤を使用して保存を実行します。自動には書き込みアクセスのあるAPIキーが必要で、手動には必要ありません。自動適用されなかった受け入れられたオファーは、収益ページのToDoリストとして表示され、手動で適用するまで残ります。
user_id(彼らのStripe顧客ID)を渡すか、彼らのStripe顧客のメールを入力させます。マッチがない場合でも、オファーは表示されますが、受け入れられたオファーは収益ページの保留キューに入り、手動で適用されるまで残ります。必要なキーは?
- Stripe - 読み取り専用の制限付きキーはインサイト(リスクのあるMRR)を提供します。オファーを自動適用するには、キーにはサブスクリプションとクーポンの書き込み、および製品と価格の読み取り(ダウングレードと割引ターゲットのパッケージ選択のため)が必要です。シークレットキーも機能しますが、制限付きキーの方が安全です。
- Lemon Squeezy - APIキーはフルアクセスで、同じキーがインサイトを提供し、一時停止とダウングレードオファーを自動適用します。Lemon Squeezy APIを介して既存のサブスクリプションに割引を適用することはできないため、割引オファーは手動パスに戻ります: 顧客にはチームが適用することが伝えられ、あなたにはそれを行うためのメールが届きます。
2つのシグナル
- 埋め込みページ -
OutroWidget.initに渡すonOfferAcceptedコールバックがofferタイプ(discount、pause、downgrade、contact)とresponseIdで発火します。 - ホストされたページ - オファーに受け入れリンクがある場合、リダイレクトには
outro_offer=<type>がoutro_response_idとあなたのuser_idと一緒に含まれます。受け入れリンクがない場合、顧客はページ上で確認を見ます - ダッシュボードまたはCSVエクスポートから結果を読み取ります。
どちらの場合も、シグナルを1つのサーバーサイドエンドポイントにルートし、そこで実行します。
// Your cancel/done page (or the embed's onOfferAccepted callback) calls this:
// POST /api/retention/fulfill { userId, offer, responseId }
app.post('/api/retention/fulfill', async (req, res) => {
const { userId, offer, responseId } = req.body
const customer = await db.customers.findByExternalId(userId)
switch (offer) {
case 'discount': await applyDiscount(customer); break
case 'pause': await pauseSubscription(customer); break
case 'downgrade': await downgradePlan(customer); break
case 'contact': await notifySupport(customer, responseId); break
}
res.json({ ok: true })
})outro_offerパラメータとコールバックペイロードはブラウザから来ます。誰でもクエリ文字列を入力できます。実行前に、顧客が実際にキャンセル中であることを確認し、引き換えを制限してください(例: 顧客1人につき年間1回のリテンション割引)。Stripeレシピ
公式のstripe Nodeライブラリと顧客のサブスクリプションIDを使用します。
// Discount - e.g. a "40% off for 3 months" coupon you created in Stripe
async function applyDiscount(customer) {
await stripe.subscriptions.update(customer.stripeSubscriptionId, {
discounts: [{ coupon: 'SAVE40_3MO' }],
})
}
// Pause - stop charging, auto-resume in 2 months
async function pauseSubscription(customer) {
const resumesAt = Math.floor(Date.now() / 1000) + 60 * 60 * 24 * 60
await stripe.subscriptions.update(customer.stripeSubscriptionId, {
pause_collection: { behavior: 'void', resumes_at: resumesAt },
})
}
// Downgrade - move the subscription item to a cheaper price
async function downgradePlan(customer) {
const sub = await stripe.subscriptions.retrieve(customer.stripeSubscriptionId)
await stripe.subscriptions.update(sub.id, {
items: [{ id: sub.items.data[0].id, price: 'price_starter_monthly' }],
proration_behavior: 'create_prorations',
})
}Lemon Squeezyレシピ
Lemon SqueezyはプレーンRESTを使用します(PATCH /v1/subscriptions/:id、APIキーを使用)。1つの特徴: LSはライブサブスクリプションに割引コードを添付できません - 「割引」オファーの場合、同じプランの割引バリアントに顧客を切り替えます。
const LS = 'https://api.lemonsqueezy.com/v1'
const headers = {
Authorization: `Bearer ${process.env.LEMONSQUEEZY_API_KEY}`,
'Content-Type': 'application/vnd.api+json',
Accept: 'application/vnd.api+json',
}
const patchSub = (id, attributes) =>
fetch(`${LS}/subscriptions/${id}`, {
method: 'PATCH',
headers,
body: JSON.stringify({ data: { type: 'subscriptions', id: String(id), attributes } }),
})
// "Discount" - move them to a discounted variant of their plan
async function applyDiscount(customer) {
await patchSub(customer.lsSubscriptionId, { variant_id: DISCOUNTED_VARIANT_ID })
}
// Pause - stop charging, auto-resume in 2 months
async function pauseSubscription(customer) {
const resumesAt = new Date(Date.now() + 1000 * 60 * 60 * 24 * 60).toISOString()
await patchSub(customer.lsSubscriptionId, {
pause: { mode: 'void', resumes_at: resumesAt },
})
}
// Downgrade - switch to the cheaper plan's variant
async function downgradePlan(customer) {
await patchSub(customer.lsSubscriptionId, { variant_id: STARTER_VARIANT_ID })
}請求統合
支払いプロバイダーを接続すると、Outroは「何人がキャンセルしたか」から「どれだけのMRRが出て行っているか」に変わります。接続されると、すべてのキャンセルが支払う顧客にマッチし、彼らのプラン、サブスクリプション年齢、リスクのある月次収益でタグ付けされます。
アカウント設定 → 統合に進みます。OutroはStripeとLemon Squeezyをサポートしており、プロバイダーごとに複数のアカウントを追加できます - 複数のストアやエンティティを運営している場合に便利です。

接続の管理
- 接続を追加 - プロバイダーAPIキーを貼り付けます。Outroは顧客(メール、プラン、MRR、サブスクリプション開始)を取り込み、マッチングのためにキャッシュします。
- 今すぐ同期 - キャッシュされた顧客リストをオンデマンドで更新します。Outroはまた、日次スケジュールで再同期します。
- 切断 - その接続のキャッシュされた顧客を削除します。過去のキャンセルスナップショットはそのままです - すでに記録された数字は変わりません。
マッチングの仕組み
キャンセルが発生すると、Outroはuser_id / external_refで渡された同期された顧客、またはメールでマッチングします。マッチは応答にスナップショットとしてキャプチャされ、MRRの数字はキャンセル時のその顧客の価値を反映します。
user_idを渡すと、最も信頼性の高いマッチングが得られます - メールマッチングはアドレスの一致に依存するため、正確です。回答の読み取り
すべての回答は回答ビューに表示されます。音声回答は自動的に文字起こしされ、翻訳されるため、テキストのようにざっと目を通すことができます - そしてそれぞれが着地した瞬間にスコアリングされ、タグ付けされます。

各回答に含まれるもの
- トランスクリプト: オリジナル言語のトランスクリプトと翻訳が並び、録音時間が表示されます。音声はリアルタイムで文字起こしされ、録音自体は保存されません。
- 感情 & テーマ: ポジティブ / ニュートラル / ネガティブ、価格設定、競合、欠けている機能などの自動検出されたテーマ。
- コンテキスト: 提出された日時、渡された
user_idとexternal_ref、言語/デバイスの詳細。
収益回復
請求プロバイダーが接続されると、収益回復ページは解約に対するドル価値を示します。ビジネスにとって実際に重要な質問に答えます: どれだけのMRRを回復し、どれだけを失ったか?

4つの数字
- リスクのあるMRR - 期間中のすべてのマッチしたキャンセルの総月次収益。
- 回復したMRR - オファーを受け入れた顧客からの収益で、請求プロバイダーでまだサブスクライブされていることが確認されています。これはオファークリックだけでなく、確認されたリテンションです。
- 確認待ち - 最近オファーを受け入れた顧客; 猶予期間が過ぎ、まだ支払っていることが確認された場合にのみ回復済みとしてカウントされます。
- 失ったMRR - オファーを受け入れずにキャンセルした顧客、またはオファーを受け入れたがそれでも解約した顧客。
回復は請求プロバイダーに対して確認されます: Outroは各受け入れた顧客のサブスクリプションステータスを再確認します(StripeまたはLemon Squeezyから同期され、少なくとも毎日更新されます)。保存は14日間の猶予期間後にのみ回復済みとしてカウントされ、サブスクリプションがまだライブである場合にのみカウントされます - したがって、数字は実際に滞在した顧客を反映し、オファーボタンのクリックではありません。見出しの数字の下には、リスクのあるMRRがプラン別と在籍期間別(0-30日、31-90日、91-180日、180日以上)に分解され、新しいトライアルを失っているのか、長期顧客を失っているのかがわかります。ヘッダー行には、支払う顧客にマッチしたキャンセルの数が表示されます - マッチしなかったもの(請求データなし)はMRRの数字を持ちません。
日付範囲フィルター(7日 / 30日 / 90日 / すべて)を使用してビューの範囲を設定し、CSVをエクスポートして生のマッチしたキャンセルをスプレッドシートに取り込みます。
顧客がキャンセルする理由
顧客がキャンセルする理由パネルは、期間をAIで検出された解約理由 - 高すぎる、機能が不足している、使用していない、使いにくい、技術的な問題、切り替え - で分解し、それぞれの数とシェアを表示します。これは音声(または書かれた)回答のみに基づいて機能するため、請求プロバイダーが接続される前でも最初の回答から役立ちます。
多くの回答がその他 / 未分類に分類されると、パネルはそれをフラグします - それは通常、AI分類がまだカバーしていない理由を顧客が挙げていることを意味し、それらの回答は手で聞く価値があります。
分析
分析ページは、すべてのキャンセルページでどれだけのフィードバックを収集しているかを示します - 時間ごとの回答量、感情のミックス、スキップ対回答率。

シフトをキャッチするために使用します - 価格変更後のネガティブ感情の急増や、新しいテーマがリストに上がってくること。
AIサマリー & 週次ダイジェスト
すべての退出インタビューを手で読むのはスケールしません。OutroのAIは生の回答を取り、読みやすいサマリーを作成します: 人々が去る主な理由、代表的な引用、感情の内訳、次のアクションの提案。

週次キャンセルダイジェスト
毎週月曜日の午前9時に、Outroは過去7日間の解約の1画面の要約をメールで送ります。それは、チームが月曜日の朝に実際に尋ねる質問に答えるために作られています: 誰が去ったのか、なぜ、そしてそれが私たちにどれだけのコストをかけたのか。
- 今週のキャンセル - 数、前週との変化。
- リスクのあるMRR、保存済み、失ったMRR - 収益回復と同じ収益の絵が週次で要約されています。
- 主なキャンセル理由 - 顧客が最も頻繁に挙げた回答の一握り。
- リテンションオファーの結果 - 受け入れられた、拒否された、または表示されなかったオファーの数。
アカウント設定 → 通知 → サンプルダイジェストをプレビューからレイアウトをいつでもプレビューでき、メールをオフにしたい場合はそこで切り替えます。週にキャンセルがゼロのアカウントはスキップされます - 空のメールはありません。
アカウント & チーム
アカウント設定(サイドバーの下部)から組織を管理し、チームメイトを招待し、パスワードを変更します。

タブ
- 一般 - アカウント名と説明を変更。
- ユーザー - メールでチームメイトを招待し、役割(オーナー、管理者、メンバー)を設定。
- 統合 - StripeとLemon Squeezyを接続(上記の請求統合を参照)。
- 通知 - 週次ダイジェストを切り替え、サンプルをプレビュー。
- 請求 - プランを確認、アップグレード、またはサブスクリプションを管理。
- セキュリティ - パスワードを変更します。
請求 & プラン
Outroには無料プランと3つの有料プランがあります - スターター、プロ、スケール。各有料プランは月次または年次で請求され、年次は約2ヶ月分無料になります。すべてのプランで回答は無制限です - プランはページ数、音声分数、AIレポート、席数で異なります。

各プランに含まれるもの
- 無料 - $0 - 1つのキャンセルページ、月10分の音声 & 月5件のAIレポート。フルフローを試すためのコミットメントなしの方法。
- スターター - $29/月 ($290/年) - 1つのキャンセルページ、月100分の音声 & 月30件のAIレポート、3つのチーム席、音声 & テキスト退出インタビュー、リテンションオファー、週次ダイジェスト、自動翻訳。
- Pro - $79/月 ($790/年) - 最大5つのキャンセルページ、月300分の音声、100件のAIレポート、10人のチームシート、高度な感情分析(テーマとトレンド)、カスタムブランディング、データエクスポート、優先サポート。
- スケール - $199/月 ($1,990/年) - 無制限のキャンセルページ、月1,000分の音声 & 月300件のAIレポート、25のチーム席、プロのすべて。
FAQ
Outroをインストールするのにエンジニアの助けが必要ですか?
ほとんど必要ありません。最も簡単なセットアップは1行です - 既存の「サブスクリプションをキャンセル」ボタンをOutroリンクに向け、リダイレクトバックを処理します。顧客をアプリ内に留めたい場合は、埋め込みスニペットを貼り付けます。請求プロバイダーの接続は設定でAPIキーを入力するだけです。
音声文字起こしはどの言語をサポートしていますか?
顧客は30以上の言語で話すことができます。すべての回答はオリジナル言語で文字起こしされ、あなたが読む言語に翻訳されるので、チームは常に1つの言語で作業できます。
顧客は自分の声がAIで文字起こしされることを知っていますか?
はい。すべての音声レコーダーには「あなたの声はAIで文字起こしされます」という短い行が表示され、プライバシーポリシーへのリンクがあり、7つのサポートされている言語に翻訳されています。これは組み込みのコンプライアンスラインであり、設定はできません。収集したフィードバックのデータ管理者はあなたであり、Outroはあなたに代わってそれを処理します。
顧客が録音したくない場合はどうなりますか?
スキップボタンをクリックすると、すぐにキャンセルを完了するためにリダイレクトされます。Outroはキャンセルをブロックしたり遅らせたりすることはありません - 回答は常にオプションです。
ページを削除した場合、データはどうなりますか?
すでに収集した回答は保持されます - ページを削除しても退出インタビューは消えません。削除する代わりにページをオフラインに切り替えることもできます。
支払わずに試すことはできますか?
はい。無料プランでは、無制限の回答(毎月10分の音声)で実際のキャンセルページを実行できます - クレジットカードは不要です。音声分数、ページ、席が必要になったら、スターター、プロ、スケールにアップグレードしてください。