How to Integrate LangChain for insurance with Twilio for AI agents
Combining LangChain for insurance with Twilio gives you a practical path to build voice and SMS agents that can handle policy servicing, claims intake, appointment reminders, and status updates without forcing customers into a web app. LangChain handles the reasoning, retrieval, and workflow orchestration; Twilio handles the channel layer so your agent can talk over SMS or phone in the systems customers already use.
Prerequisites
- •Python 3.10+
- •A Twilio account with:
- •
TWILIO_ACCOUNT_SID - •
TWILIO_AUTH_TOKEN - •a verified Twilio phone number
- •
- •Access to your insurance knowledge sources:
- •policy PDFs
- •claims SOPs
- •underwriting guidelines
- •FAQ documents
- •LangChain installed with the packages you need for your stack:
- •
langchain - •
langchain-openaior another chat model provider - •
langchain-community
- •
- •A vector store or retriever backend for insurance content:
- •FAISS, Pinecone, Chroma, or similar
- •A webhook endpoint for Twilio inbound messages:
- •Flask, FastAPI, or Django
Integration Steps
- •Install dependencies and set environment variables
pip install langchain langchain-openai langchain-community twilio flask python-dotenv
import os
from dotenv import load_dotenv
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY", "")
os.environ["TWILIO_ACCOUNT_SID"] = os.getenv("TWILIO_ACCOUNT_SID", "")
os.environ["TWILIO_AUTH_TOKEN"] = os.getenv("TWILIO_AUTH_TOKEN", "")
TWILIO_NUMBER = os.getenv("TWILIO_NUMBER", "")
- •Build a LangChain insurance assistant
This example uses a retriever-backed chain so the agent answers from policy docs instead of guessing.
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain.chains import RetrievalQA
loader = TextLoader("insurance_faq.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=120)
chunks = splitter.split_documents(docs)
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=retriever,
return_source_documents=True,
)
- •Wrap the chain in an agent-style function
This is where you normalize customer input into a response suitable for SMS or voice follow-up.
def answer_policy_question(message: str) -> str:
result = qa_chain.invoke({"query": message})
answer = result["result"]
# Keep SMS responses short and operational.
if len(answer) > 500:
answer = answer[:497] + "..."
return answer
sample_reply = answer_policy_question(
"Does my auto policy cover rental cars after an accident?"
)
print(sample_reply)
- •Send the response through Twilio SMS
Use Twilio’s Python SDK Client.messages.create() to send the LangChain-generated answer back to the customer.
from twilio.rest import Client
twilio_client = Client(
os.environ["TWILIO_ACCOUNT_SID"],
os.environ["TWILIO_AUTH_TOKEN"],
)
def send_sms(to_number: str, body: str) -> None:
message = twilio_client.messages.create(
from_=TWILIO_NUMBER,
to=to_number,
body=body,
)
print(f"Sent message SID: {message.sid}")
send_sms("+15551234567", sample_reply)
- •Expose a webhook for inbound Twilio messages
Twilio posts inbound SMS to your webhook. Your app receives the text, runs it through LangChain, then replies.
from flask import Flask, request, Response
app = Flask(__name__)
@app.post("/twilio/inbound-sms")
def inbound_sms():
incoming_text = request.form.get("Body", "")
from_number = request.form.get("From", "")
reply_text = answer_policy_question(incoming_text)
send_sms(from_number, reply_text)
return Response("", status=200)
if __name__ == "__main__":
app.run(port=5000, debug=True)
Testing the Integration
Run your Flask app locally, expose it with ngrok, then point your Twilio phone number webhook to:
https://your-ngrok-domain.ngrok-free.app/twilio/inbound-sms
Then test with a real SMS message like:
# Manual test helper
test_message = "What is my deductible for comprehensive coverage?"
response_text = answer_policy_question(test_message)
print("Agent reply:", response_text)
Expected output:
Agent reply: Your comprehensive deductible depends on your selected coverage tier. If you want, I can help you check the exact amount in your policy documents.
If Twilio is wired correctly, sending an SMS to your Twilio number should trigger the webhook and return a response within a few seconds.
Real-World Use Cases
- •
Claims intake by SMS
- •Let customers describe damage in plain English.
- •The LangChain layer extracts claim details and asks follow-up questions.
- •Twilio delivers confirmations and next-step instructions.
- •
Policy servicing assistant
- •Answer coverage questions like deductibles, exclusions, renewal dates, and billing issues.
- •Use LangChain retrieval over approved insurance documents.
- •Push responses via SMS or escalate to an adjuster.
- •
Appointment and document reminders
- •Send automated reminders for inspections, missing documents, or premium payments.
- •Use Twilio scheduled messaging.
- •Use LangChain to personalize reminders based on customer context and policy type.
Keep learning
- •The complete AI Agents Roadmap — my full 8-step breakdown
- •Free: The AI Agent Starter Kit — PDF checklist + starter code
- •Work with me — I build AI for banks and insurance companies
By Cyprian Aarons, AI Consultant at Topiax.
Want the complete 8-step roadmap?
Grab the free AI Agent Starter Kit — architecture templates, compliance checklists, and a 7-email deep-dive course.
Get the Starter Kit