---
title: "n8n-এর সঙ্গে ThunderPhone ব্যবহার করুন"
description: "n8n-এর জন্য ThunderPhone নোড ইনস্টল করুন, একটি সার্ভার API কী সংযুক্ত করুন এবং এমন একটি ওয়ার্কফ্লো তৈরি করুন যা প্রতিবার একটি কল শেষ হলে চলে।"
---

[n8n](https://n8n.io) একটি ওয়ার্কফ্লো অটোমেশন টুল। n8n-এর জন্য ThunderPhone প্যাকেজটি দুটি নোড যোগ করে:

- **ThunderPhone Trigger** একটি কল শেষ হলে (**কল সম্পন্ন হয়েছে**) বা কল গ্রেডিং রান শেষ হলে (**কল গ্রেড করা হয়েছে**) একটি ওয়ার্কফ্লো শুরু করে।
- **ThunderPhone** আউটবাউন্ড কল করে, প্রচারাভিযানে কনট্যাক্ট যোগ করে ও সেগুলো শুরু করে, ট্রান্সক্রিপ্ট ও রেকর্ডিংসহ কল পায় এবং আপনার এজেন্ট ও ফোন নম্বরের তালিকা দেখায়।

এটি একটি যাচাইকৃত কমিউনিটি নোড, যা
[n8n-এ ThunderPhone](https://n8n.io/integrations/thunderphone/) হিসেবে তালিকাভুক্ত।

## নোড ইনস্টল করুন

n8n এডিটরে, নোড প্যানেল খুলতে **+**-এ ক্লিক করুন এবং
**ThunderPhone** খুঁজুন। অন্য ব্যবহারকারীরা যোগ করার আগে একটি ইনস্ট্যান্স মালিককে যাচাইকৃত নোড সেট আপ করতে হতে পারে।

স্ব-হোস্টেড n8n-এ, আপনি প্যাকেজের নাম দিয়েও ইনস্টল করতে পারেন: 
**সেটিংস > কমিউনিটি নোডস** খুলুন এবং `n8n-nodes-thunderphone` ইনস্টল করুন। ইনস্টল করার আগে কমিউনিটি-নোডের ঝুঁকি এবং আপনার ইনস্ট্যান্সের নীতি পরীক্ষা করুন।

## একটি সার্ভার API কী তৈরি করুন

<Steps>
  <Step title="কীসমূহ ট্যাব খুলুন">
    ThunderPhone-এ, **সংগঠন → কীসমূহ**-এ যান এবং **কী তৈরি করুন**-এ ক্লিক করুন।
  </Step>
  <Step title="এটির নাম দিন">
    কীটি কোথায় ব্যবহৃত হয় তা বোঝায় এমন একটি নাম ব্যবহার করুন, যেমন "n8n"।
  </Step>
  <Step title="এখনই কপি করুন">
    সম্পূর্ণ `sk_live_...` সিক্রেটটি একবার দেখানো হয়। ডায়ালগ বন্ধ করার আগে এটি কপি করুন।
  </Step>
</Steps>

শুধুমাত্র একজন অ্যাডমিন বা মালিক কীটি তৈরি করতে পারেন, এবং ThunderPhone এটি দিয়ে করা অনুরোধগুলোকে সেই ব্যক্তির পক্ষ থেকে আসা হিসেবে বিবেচনা করে। ট্রিগার এবং প্রচারাভিযান কার্যক্রমের জন্য সেই ব্যক্তিকে অ্যাডমিন বা মালিকের ভূমিকা বজায় রাখতে হবে।
[একটি সার্ভার API কী তৈরি করুন](/bn/guides/api-keys)-এ রোটেশন ও প্রত্যাহার সম্পর্কে আলোচনা করা হয়েছে।

## n8n-এ ক্রেডেনশিয়াল যোগ করুন

1. n8n-এ **ThunderPhone API** ধরনের একটি ক্রেডেনশিয়াল তৈরি করুন।
2. **API কী**-তে কীটি পেস্ট করুন।
3. এটি সংরক্ষণ করুন এবং ক্রেডেনশিয়াল পরীক্ষা চালান। পরীক্ষাটি `GET /v1/calls?limit=1` দিয়ে আপনার সংগঠন থেকে একটি কল পড়ে।

## আপনার প্রথম ওয়ার্কফ্লো তৈরি করুন

প্রতিবার একটি কল শেষ হলে এই ওয়ার্কফ্লো একটি Google Sheets-এ একটি সারি যোগ করে।

<Steps>
  <Step title="ট্রিগার যোগ করুন">
    **ThunderPhone ট্রিগার** যোগ করুন, আপনার ThunderPhone API শংসাপত্র নির্বাচন করুন এবং
    **ইভেন্ট**-এ **কল সম্পন্ন** সেট করুন।
  </Step>
  <Step title="কল পান">
    একটি **ThunderPhone** নোড যোগ করুন। **রিসোর্স**-এ **কল**, **অপারেশন**-এ
    **পান**, এবং **কল আইডি**-তে `{{ $json.data.call_id }}` এক্সপ্রেশন সেট করুন।
    আউটপুট হলো [কল রেকর্ড](/api-reference/calls), সঙ্গে `transcripts`
    এবং `recording_url`—একটি স্বল্পমেয়াদি লিংক, কলের কোনো রেকর্ডিং না থাকলে যা `null` থাকে।
  </Step>
  <Step title="একটি সারি যোগ করুন">
    একটি Google Sheets নোড যোগ করুন যা একটি সারি যুক্ত করে, এবং Get Call আউটপুট থেকে
    আপনার প্রয়োজনীয় কলামগুলো ম্যাপ করুন (নিচের টেবিল দেখুন)।
  </Step>
  <Step title="ওয়ার্কফ্লো সক্রিয় করুন">
    সংরক্ষণ করুন এবং সক্রিয় করুন। ট্রিগারটি আপনার ThunderPhone প্রতিষ্ঠানে তার প্রোডাকশন URL-কে
    একটি webhook endpoint হিসেবে নিবন্ধন করে। ওয়ার্কফ্লো নিষ্ক্রিয় করলে সেই endpoint মুছে যায়।
  </Step>
  <Step title="এটি পরীক্ষা করুন">
    বিল্ডারে একটি এজেন্ট খুলুন, **কথা বলুন**-এ ক্লিক করুন এবং কলটি শেষ করুন। বিল্ডার
    পরীক্ষামূলক কলগুলো `web.complete` হিসেবে পাঠানো হয়, যা কল সম্পন্নের পেছনের দুটি ইভেন্টের
    একটি, তাই ওয়ার্কফ্লো চলে এবং একটি সারি দেখা যায়।
  </Step>
</Steps>

উপযোগী কলাম:

| কলাম | এক্সপ্রেশন |
|---|---|
| কল আইডি | `{{ $json.call_id }}` |
| দিক | `{{ $json.direction }}` |
| থেকে | `{{ $json.from_number }}` |
| পর্যন্ত | `{{ $json.to_number }}` |
| শুরু হয়েছে | `{{ $json.start_time }}` |
| সময়কাল (সেকেন্ড) | `{{ $json.duration_seconds }}` |
| অবস্থা | `{{ $json.status }}` |
| শেষ হওয়ার কারণ | `{{ $json.end_reason }}` |
| কল লিংক | `https://app.thunderphone.com/dashboard/call-history/{{ $json.call_id }}` |

কল লিংকটি আপনার প্রতিষ্ঠানের সদস্যদের জন্য ThunderPhone ড্যাশবোর্ডে কলটি তার
ট্রান্সক্রিপ্ট এবং রেকর্ডিংসহ খোলে, তাই শিটে কোনোটিই সংরক্ষণ করার প্রয়োজন নেই।

তবুও ট্রান্সক্রিপ্ট যোগ করতে
`{{ $json.transcripts.filter(t => typeof t.content === 'string').map(t => t.role + ': ' + t.content).join('\n') }}` ম্যাপ করুন।
রেকর্ডিং URL-এর মেয়াদ শেষ হয়, তাই কল আইডি সংরক্ষণ করুন এবং নতুন লিংক প্রয়োজন হলে আবার Get Call চালান।
কলের ট্রান্সক্রিপ্ট, সারাংশ এবং রেকর্ডিংয়ে ব্যক্তিগত বা স্বাস্থ্যসংক্রান্ত তথ্য থাকতে পারে।
সেগুলো কেবল এমন অ্যাপে পাঠান যেগুলো আপনার প্রতিষ্ঠান সেই ডেটার জন্য ব্যবহার করতে অনুমোদিত,
স্বাস্থ্যসংক্রান্ত তথ্য থাকলে BAA-এর অধীনে, এবং শুধুমাত্র আপনার প্রয়োজনীয় ফিল্ডগুলো রাখুন।

<Note>
  ThunderPhone ট্রিগারের **প্রোডাকশন
  URL**-এ `POST` দিয়ে ইভেন্ট পাঠায়, তাই আপনার n8n ইনস্ট্যান্স ইন্টারনেট থেকে HTTPS-এর মাধ্যমে পৌঁছানোযোগ্য
  হতে হবে এবং ওয়ার্কফ্লোটি সক্রিয় থাকতে হবে। ট্রিগারটি প্রতিটি অনুরোধে
  `X-ThunderPhone-Signature` HMAC যাচাই করে এবং স্বাক্ষরবিহীন বা অবৈধ যেকোনো কিছুর জন্য `401`
  উত্তর দেয়।
</Note>

ট্রিগারটি সম্পূর্ণ ইভেন্ট আউটপুট করে: `type`, `event_id` এবং `data`। প্রতিটি ফিল্ডের জন্য
[`telephony.complete` / `web.complete`](/bn/webhooks/call-complete) এবং
[`call.graded`](/bn/webhooks/events) দেখুন। ডেলিভারি কমপক্ষে একবার হয়,
এবং একটি ইভেন্টের পুনঃচেষ্টাগুলোর মধ্যে `event_id` একই থাকে, তাই এমন কোনো ধাপের আগে এটি পরীক্ষা করুন
যা পুনরাবৃত্তি হওয়া উচিত নয়।

## নিরাপদে আউটবাউন্ড কল করুন

**আউটবাউন্ড কল করুন** (রিসোর্স **আউটবাউন্ড কল**, অপারেশন **কল করুন**)
নেয়:

| ক্ষেত্র | অর্থ |
|---|---|
| এজেন্টের নাম বা ID | একটি সংরক্ষিত এজেন্ট। ড্রপডাউনে আপনার এজেন্টগুলোর তালিকা থাকে। |
| ফোন নম্বরের নাম বা ID | যেখান থেকে কল করা হবে সেই নম্বর। ড্রপডাউনে শুধু আউটবাউন্ড কলের জন্য সক্রিয় নম্বরগুলো থাকে। |
| প্রাপক নম্বর | E.164 ফরম্যাটে গন্তব্য নম্বর, যেমন `+14155552671`। |
| ভেরিয়েবল | এজেন্টের prompt-এ প্লেসহোল্ডারের জন্য মানের JSON অবজেক্ট। |
| আইডেমপোটেন্সি কী | আপস্ট্রিম রেকর্ড বা ইভেন্ট থেকে একটি স্থিতিশীল ID। প্রয়োজনীয়। |

**আইডেমপোটেন্সি কী** এমন কোনো ID-তে ম্যাপ করুন যা রানটি ঘটিয়েছে, যেমন একটি
CRM রেকর্ড ID বা ট্রিগারের `event_id`। নোডটি পাঠায়
`n8n:<node ID>:<your value>`, তাই:

- স্বয়ংক্রিয় পুনরায় চেষ্টা বা **এক্সিকিউশন পুনরায় চেষ্টা করুন** একই কী পাঠায়, এবং
  ThunderPhone আবার ডায়াল করার পরিবর্তে `idempotent_replay: true` সহ মূল কলটি ফেরত দেয়।
- একই রেকর্ড দিয়ে চালিত দুটি ThunderPhone নোড ভিন্ন কী পাঠায়।
- কোনো অনুরোধ পাঠানোর আগেই খালি মান ব্যর্থ হয়।

টাইমস্ট্যাম্প, র্যান্ডম মান এবং n8n এক্সিকিউশন বা ওয়ার্কফ্লো ID এড়িয়ে চলুন। পুনরায় চেষ্টার সময়
নতুন মান দিলে দ্বিতীয় একটি বাস্তব কল করা হয়। সম্পূর্ণ কী সর্বোচ্চ 128
অক্ষরের হতে পারে। ভিন্ন এজেন্ট, নম্বর বা ভেরিয়েবলের সঙ্গে একটি কী পুনরায় ব্যবহার করলে
কনফ্লিক্টসহ ব্যর্থ হয়।

**ক্যাম্পেইন।** **পরিচিতি যোগ করুন** (রিসোর্স **ক্যাম্পেইন**) একটি
খসড়া ক্যাম্পেইনে পরিচিতি যোগ করে। এটি একটি ক্যাম্পেইন ID এবং পরিচিতিগুলোর একটি JSON অ্যারে নেয়। প্রতিটি পরিচিতির `phone_number` প্রয়োজন; অন্যান্য কী
কল ভেরিয়েবল হয়ে যায়। সব পরিচিতি প্রত্যাখ্যাত হলে নোডটি ব্যর্থ হয় এবং
শুধু কিছু পরিচিতি প্রত্যাখ্যাত হলে `partial_success: true` সেট করে। **শুরু করুন**-এর জন্য এমন চেকবক্স নিশ্চিত করতে হয় যা জানায় যে ক্যাম্পেইনটি বাস্তব কল করবে এবং ThunderPhone
ক্রেডিট ব্যয় করবে। দেখুন [আউটবাউন্ড ক্যাম্পেইন](/bn/guides/outbound-campaigns)।

কোনো ওয়ার্কফ্লো কল শুরু করার আগে:

- ThunderPhone যদি আপনার সংস্থাকে নিশ্চিত করতে বলে যে তার আউটবাউন্ড কলগুলো
  TCPA এবং অন্যান্য কলিং আইন মেনে চলে, তাহলে একজন অ্যাডমিনকে আগে ড্যাশবোর্ডে
  সেই নিশ্চিতকরণ নথিভুক্ত করতে হবে।
- যেখান থেকে কল করা হবে সেই নম্বরটি আউটবাউন্ড কলের জন্য সক্রিয় থাকতে হবে। আপনার
  নিজস্ব ক্যারিয়ার থেকে আনা নম্বরগুলো যাচাই হয়ে গেলে যোগ্য হয়। ThunderPhone নম্বরগুলো শুরুতে
  শুধু ইনবাউন্ডের জন্য থাকে এবং আউটবাউন্ড ব্যবহারের জন্য অনুমোদিত হতে পারে: একজন অ্যাডমিন
  ফোন নম্বর পৃষ্ঠা থেকে এটির অনুরোধ করেন। দেখুন
  [একটি ফোন নম্বর নিন](/bn/guides/get-a-phone-number)।
- প্রতিটি নম্বরে কল করার সম্মতি থাকা এবং প্রযোজ্য কলিং আইন
  মেনে চলার দায়িত্ব আপনার সংস্থার। দেখুন
  [আউটবাউন্ড কলিং আইন](/bn/guides/outbound-calling-laws)।

## উদাহরণ ওয়ার্কফ্লো

- **CRM পরিচিতি থেকে ক্যাম্পেইন।** CRM পরিচিতিগুলো একটি খসড়া ThunderPhone
  ক্যাম্পেইনে যোগ করুন, তারপর কেউ তালিকাটি অনুমোদন করলে ক্যাম্পেইন শুরু করুন।
- **সম্পন্ন কল থেকে গ্রাহক রেকর্ড।** কল সম্পন্ন হলে, কল পান চালান
  এবং মিল থাকা গ্রাহক রেকর্ডে ট্রান্সক্রিপ্ট ও রেকর্ডিং লিংক সংরক্ষণ করুন।
- **কম গ্রেড পর্যালোচনায় পাঠান।** কল গ্রেডেড হলে,
  `{{ $json.data.grade.score }}` দিয়ে ফিল্টার করুন এবং কম স্কোরের কলগুলোকে কল ID ও গ্রেডের বিবরণসহ
  একটি পর্যালোচনা কিউতে পাঠান। একটি কল একাধিকবার গ্রেড করা যেতে পারে,
  এবং প্রতিটি সম্পন্ন গ্রেডিং রান ট্রিগার চালায়, তাই প্রতিটি কল ID-এর জন্য শুধু সর্বশেষ
  `graded_at` রাখুন।

কল ট্রান্সক্রিপ্ট, সারসংক্ষেপ এবং রেকর্ডিংয়ে ব্যক্তিগত বা স্বাস্থ্যসংক্রান্ত
তথ্য থাকতে পারে। সেই তথ্যের জন্য আপনার সংস্থা যে অ্যাপগুলো ব্যবহার করতে অনুমোদিত, শুধু সেগুলোতেই পাঠান,
স্বাস্থ্যসংক্রান্ত তথ্য থাকলে BAA-এর অধীনে পাঠান, এবং শুধু প্রয়োজনীয়
ক্ষেত্রগুলোই রাখুন।

<Note>
  একই কল ইভেন্ট আপনার নিজস্ব সার্ভারে পাঠাচ্ছেন? দেখুন
  [Webhook এন্ডপয়েন্ট](/bn/webhooks/endpoints)।
  [আউটবাউন্ড কল করুন](/bn/guides/place-outbound-calls)-এ
  আউটবাউন্ড কল করুন-এর পেছনের API ব্যাখ্যা করা হয়েছে।
</Note>
