Source code for pypipedrive.models.call_logs

from typing import Dict, List
from typing_extensions import Self
from pypipedrive.api import V1
from pypipedrive.utils import warn_endpoint_legacy, build_multipart_file_tuple
from pypipedrive.orm.model import Model, SaveResult
from pypipedrive.orm import fields as F


[docs]class CallLogs(Model): """ Call logs describe the outcome of a phone call managed by an integrated provider. Since these logs are also considered activities, they can be associated with a deal or a lead, a person and/or an organization. Call logs do differ from other activities, as they only receive the information needed to describe the phone call. See `CallLogs API reference <https://developers.pipedrive.com/docs/api/v1/CallLogs>`_. Returns all call logs assigned to a particular user. * GET[Cost:20] ``v1/callLogs`` Returns details of a specific call log. * GET[Cost:2] ``v1/callLogs/{id}`` Adds a new call log. * POST[Cost:10] ``v1/callLogs`` Attach an audio file to the call log. * POST[Cost:10] ``v1/callLogs/{id}/recording`` Deletes a call log. * DELETE[Cost:6] ``v1/callLogs/{id}`` """ id = F.TextField("id") activity_id = F.IntegerField("activity_id") person_id = F.IntegerField("person_id") org_id = F.IntegerField("org_id") deal_id = F.IntegerField("deal_id") subject = F.TextField("subject") duration = F.IntegerField("duration") # connected, no_answer, left_message, left_voicemail, wrong_number, busy outcome = F.TextField("outcome") # TODO: add choice validation from_phone_number = F.TextField("from_phone_number") to_phone_number = F.TextField("to_phone_number") has_recording = F.BooleanField("has_recording") start_time = F.DatetimeField("start_time") end_time = F.DatetimeField("end_time") user_id = F.IntegerField("user_id") company_id = F.IntegerField("company_id") note = F.TextField("note") class Meta: entity_name = "callLogs" version = V1
[docs] @warn_endpoint_legacy @classmethod def get(cls, *args, **kwargs) -> Self: """ Returns details of a specific call log. """ return super().get(*args, **kwargs)
[docs] @warn_endpoint_legacy @classmethod def all(cls, *args, **kwargs) -> List[Self]: """ Returns all call logs assigned to a particular user. Allowed query parameters: - ``start`` (int): Pagination start. Defaults: 0. - ``limit`` (int): For pagination, the limit of entries to be returned. The upper limit is 50. Returns: A list of CallLog instances. """ return super().all(*args, **kwargs)
[docs] @warn_endpoint_legacy def save(self, *args, **kwargs) -> SaveResult: """ Adds a new call log. Mandatory fields: - ``outcome`` (str): Describes the outcome of the call. Values: connected, no_answer, left_message, left_voicemail, wrong_number, busy. - ``to_phone_number`` (str): The number called. - ``start_time`` (str): The date and time of the start of the call in UTC. Format: YYYY-MM-DD HH:MM:SS. - ``end_time`` (str): The date and time of the end of the call in UTC. Format: YYYY-MM-DD HH:MM:SS. """ return super().save(*args, **kwargs)
[docs] @warn_endpoint_legacy def delete(self, *args, **kwargs) -> bool: return super().delete(*args, **kwargs)
[docs] @warn_endpoint_legacy @classmethod def batch_delete(cls, *args, **kwargs): raise NotImplementedError("CallLogs.batch_delete() is not allowed.")
[docs] @warn_endpoint_legacy def attach_audio_file( self, data: bytes, file_name: str, content_type: str) -> Dict: """ Adds an audio recording to the call log. That audio can be played by those who have access to the call log object. Args: data: The binary data of the audio file. file_name: The name of the audio file. content_type: The MIME type of the audio file. Returns: The API response as a dictionary ({success: true}). """ assert isinstance(data, bytes), "data must be bytes" assert isinstance(file_name, str), "file_name must be a string" assert isinstance(content_type, str), "content_type must be a string" files = { "file": build_multipart_file_tuple( data = data, file_name = file_name, content_type = content_type, ) } uri = f"{self._get_meta('entity_name')}/{self.id}/recordings" return self.get_api(version=V1).post(uri=uri, files=files).to_dict()