mirror of
				https://github.com/hwchase17/langchain.git
				synced 2025-10-31 16:08:59 +00:00 
			
		
		
		
	Signed-off-by: ChengZi <chen.zhang@zilliz.com> Co-authored-by: Eugene Yurtsev <eyurtsev@gmail.com> Co-authored-by: Bagatur <22008038+baskaryan@users.noreply.github.com> Co-authored-by: Dan O'Donovan <dan.odonovan@gmail.com> Co-authored-by: Tom Daniel Grande <tomdgrande@gmail.com> Co-authored-by: Grande <Tom.Daniel.Grande@statsbygg.no> Co-authored-by: Bagatur <baskaryan@gmail.com> Co-authored-by: ccurme <chester.curme@gmail.com> Co-authored-by: Harrison Chase <hw.chase.17@gmail.com> Co-authored-by: Tomaz Bratanic <bratanic.tomaz@gmail.com> Co-authored-by: ZhangShenao <15201440436@163.com> Co-authored-by: Friso H. Kingma <fhkingma@gmail.com> Co-authored-by: ChengZi <chen.zhang@zilliz.com> Co-authored-by: Nuno Campos <nuno@langchain.dev> Co-authored-by: Morgante Pell <morgantep@google.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """Util that calls Twilio."""
 | |
| 
 | |
| from typing import Any, Dict, Optional
 | |
| 
 | |
| from langchain_core.utils import get_from_dict_or_env
 | |
| from pydantic import BaseModel, ConfigDict, model_validator
 | |
| 
 | |
| 
 | |
| class TwilioAPIWrapper(BaseModel):
 | |
|     """Messaging Client using Twilio.
 | |
| 
 | |
|     To use, you should have the ``twilio`` python package installed,
 | |
|     and the environment variables ``TWILIO_ACCOUNT_SID``, ``TWILIO_AUTH_TOKEN``, and
 | |
|     ``TWILIO_FROM_NUMBER``, or pass `account_sid`, `auth_token`, and `from_number` as
 | |
|     named parameters to the constructor.
 | |
| 
 | |
|     Example:
 | |
|         .. code-block:: python
 | |
| 
 | |
|             from langchain_community.utilities.twilio import TwilioAPIWrapper
 | |
|             twilio = TwilioAPIWrapper(
 | |
|                 account_sid="ACxxx",
 | |
|                 auth_token="xxx",
 | |
|                 from_number="+10123456789"
 | |
|             )
 | |
|             twilio.run('test', '+12484345508')
 | |
|     """
 | |
| 
 | |
|     client: Any = None  #: :meta private:
 | |
|     account_sid: Optional[str] = None
 | |
|     """Twilio account string identifier."""
 | |
|     auth_token: Optional[str] = None
 | |
|     """Twilio auth token."""
 | |
|     from_number: Optional[str] = None
 | |
|     """A Twilio phone number in [E.164](https://www.twilio.com/docs/glossary/what-e164) 
 | |
|         format, an 
 | |
|         [alphanumeric sender ID](https://www.twilio.com/docs/sms/send-messages#use-an-alphanumeric-sender-id), 
 | |
|         or a [Channel Endpoint address](https://www.twilio.com/docs/sms/channels#channel-addresses) 
 | |
|         that is enabled for the type of message you want to send. Phone numbers or 
 | |
|         [short codes](https://www.twilio.com/docs/sms/api/short-code) purchased from 
 | |
|         Twilio also work here. You cannot, for example, spoof messages from a private 
 | |
|         cell phone number. If you are using `messaging_service_sid`, this parameter 
 | |
|         must be empty.
 | |
|     """
 | |
| 
 | |
|     model_config = ConfigDict(
 | |
|         arbitrary_types_allowed=False,
 | |
|         extra="forbid",
 | |
|     )
 | |
| 
 | |
|     @model_validator(mode="before")
 | |
|     @classmethod
 | |
|     def validate_environment(cls, values: Dict) -> Any:
 | |
|         """Validate that api key and python package exists in environment."""
 | |
|         try:
 | |
|             from twilio.rest import Client
 | |
|         except ImportError:
 | |
|             raise ImportError(
 | |
|                 "Could not import twilio python package. "
 | |
|                 "Please install it with `pip install twilio`."
 | |
|             )
 | |
|         account_sid = get_from_dict_or_env(values, "account_sid", "TWILIO_ACCOUNT_SID")
 | |
|         auth_token = get_from_dict_or_env(values, "auth_token", "TWILIO_AUTH_TOKEN")
 | |
|         values["from_number"] = get_from_dict_or_env(
 | |
|             values, "from_number", "TWILIO_FROM_NUMBER"
 | |
|         )
 | |
|         values["client"] = Client(account_sid, auth_token)
 | |
|         return values
 | |
| 
 | |
|     def run(self, body: str, to: str) -> str:
 | |
|         """Run body through Twilio and respond with message sid.
 | |
| 
 | |
|         Args:
 | |
|             body: The text of the message you want to send. Can be up to 1,600
 | |
|                 characters in length.
 | |
|             to: The destination phone number in
 | |
|                 [E.164](https://www.twilio.com/docs/glossary/what-e164) format for
 | |
|                 SMS/MMS or
 | |
|                 [Channel user address](https://www.twilio.com/docs/sms/channels#channel-addresses)
 | |
|                 for other 3rd-party channels.
 | |
|         """
 | |
|         message = self.client.messages.create(to, from_=self.from_number, body=body)
 | |
|         return message.sid
 |