<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Out Of Office in Tickets &amp; Conversations</title>
    <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809214#M5181</link>
    <description>&lt;P&gt;Hey&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/586598"&gt;@BridgeheadIT&lt;/a&gt;,&amp;nbsp;thanks for reaching out!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There are other users asking for this functionality. I strongly encourage you to upvote &lt;A href="https://community.hubspot.com/t5/HubSpot-Ideas/Autoresponder-on-conversations-inbox/idi-p/303643" target="_blank" rel="noopener"&gt;this HubSpot Ideas thread&lt;/A&gt; and share your thoughts and use case for the best shot at making this a reality.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm not sure if there's an intuitive workaround for preventing the tickets from being assigned to an OOO user (unless you make a note in a shared communication channel), but you could create a filter that would show you the tickets owned by that particular user. You could then reassign them as needed if any new tickets are assigned during the day. You could also consider having the OOO user change their user's name in HubSpot to include "OOO" or "Don't Assign" or something like that, but they would need to remember to change their name before and after their time out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sorry I can't be of more help!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 19 Jun 2023 18:25:28 GMT</pubDate>
    <dc:creator>jolle</dc:creator>
    <dc:date>2023-06-19T18:25:28Z</dc:date>
    <item>
      <title>Set Out Of Office for Ticket Owner</title>
      <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809183#M5180</link>
      <description>&lt;P&gt;Is it possible for a HubSpot user to set an out of office so that other HubSpot user will see that and not assign tickets to that user for that time period?&lt;/P&gt;</description>
      <pubDate>Thu, 22 Jun 2023 23:09:12 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809183#M5180</guid>
      <dc:creator>BridgeheadIT</dc:creator>
      <dc:date>2023-06-22T23:09:12Z</dc:date>
    </item>
    <item>
      <title>Re: Out Of Office</title>
      <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809214#M5181</link>
      <description>&lt;P&gt;Hey&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/586598"&gt;@BridgeheadIT&lt;/a&gt;,&amp;nbsp;thanks for reaching out!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There are other users asking for this functionality. I strongly encourage you to upvote &lt;A href="https://community.hubspot.com/t5/HubSpot-Ideas/Autoresponder-on-conversations-inbox/idi-p/303643" target="_blank" rel="noopener"&gt;this HubSpot Ideas thread&lt;/A&gt; and share your thoughts and use case for the best shot at making this a reality.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm not sure if there's an intuitive workaround for preventing the tickets from being assigned to an OOO user (unless you make a note in a shared communication channel), but you could create a filter that would show you the tickets owned by that particular user. You could then reassign them as needed if any new tickets are assigned during the day. You could also consider having the OOO user change their user's name in HubSpot to include "OOO" or "Don't Assign" or something like that, but they would need to remember to change their name before and after their time out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sorry I can't be of more help!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 19 Jun 2023 18:25:28 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809214#M5181</guid>
      <dc:creator>jolle</dc:creator>
      <dc:date>2023-06-19T18:25:28Z</dc:date>
    </item>
    <item>
      <title>Re: Out Of Office</title>
      <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809640#M5188</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.hubspot.com/t5/user/viewprofilepage/user-id/586598"&gt;@BridgeheadIT&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There is a HubSpot app called &lt;A href="https://app.hubspot.com/ecosystem/166694/marketplace/apps/sales/crm/distributely-308730" target="_blank" rel="noopener"&gt;Distibutely&lt;/A&gt; that allows you to set up OOO rules for contact, company and ticket assignments. This way when someone is off, they can be skipped in the assignment rules and assigned to someone else who is active. I highly recommend checking it out.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you're interested in learning more about the app or would like a live demo, let me know and I can connect you with the team!&lt;/P&gt;</description>
      <pubDate>Tue, 20 Jun 2023 14:50:25 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/809640#M5188</guid>
      <dc:creator>OPerek-Clark</dc:creator>
      <dc:date>2023-06-20T14:50:25Z</dc:date>
    </item>
    <item>
      <title>Re: Set Out Of Office for Ticket Owner</title>
      <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/877564#M6038</link>
      <description>&lt;P&gt;Hi All! Using a workflow combined with owners/contacts scopes of the API I have been able to create this functionality.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Step 1: Create a new property on contacts. This will be where you store your Out of Office or Available status for your team members (owners).&lt;/P&gt;&lt;P&gt;Step 2. Create a branch in the workflow to filter out any tickets that have no Owner - add the following steps to the branch for tickets where Owner is known.&lt;/P&gt;&lt;P&gt;Step 3: Use a custom code step in your workflow to get owner for the ticket owner. Note that you will need to have a Secret selected and pull in the Ticket Owner property in from the trigger step. Also ensure that you have the outputs added to the Data outputs section:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;const fetch = require('node-fetch');

exports.main = async (event, callback) =&amp;gt; {
  try {
    const hubspot_owner_id = event.inputFields['hubspot_owner_id'];
    const ACCESS_TOKEN = process.env.SECRET_NAME;

    const [ownerEmail, ownerFullName, ownerFirstName] = await getOwner(hubspot_owner_id, ACCESS_TOKEN);
    console.log('Ticket Owner Full Name: ' + ownerFullName);
    console.log('Ticket Owner Email: ' + ownerEmail);

    const [contactID, availability] = await getContact(ownerEmail, ACCESS_TOKEN);

    console.log(
      '\nContact ID: ' + contactID +
      '\nAvailability: ' + availability
    );

    callback({
      outputFields: {
        ownerEmail: ownerEmail,
        contactID: contactID,
        availability: availability,
        ownerFullName: ownerFullName,
        ownerFirstName: ownerFirstName
      }
    });
  } catch (error) {
    console.error('Error in main:', error);
    callback({
      outputFields: {
        ownerEmail: null,
        contactID: null,
        availability: null,
        ownerFullName: null,
        ownerFirstName: null
      }
    });
  }
};

async function getOwner(hubspot_owner_id, ACCESS_TOKEN) {
  const url = `https://api.hubapi.com/crm/v3/owners/${hubspot_owner_id}`;
  const getOptions = {
    method: 'get',
    headers: { 'Authorization': `Bearer ${ACCESS_TOKEN}` },
    muteHttpExceptions: true,
  };

  const response = await fetch(url, getOptions);
  const json = await response.json();
  
  const ownerEmail = json['email'];
  const ownerFullName = json['firstName'] + ' ' + json['lastName'];
  const ownerFirstName = json['firstName'];
  
  
  return [ownerEmail, ownerFullName, ownerFirstName];
}

async function getContact(ownerEmail, ACCESS_TOKEN) {
  const url = 'https://api.hubapi.com/crm/v3/objects/contacts/search';

  const payload = {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${ACCESS_TOKEN}`
    },
    body: JSON.stringify({
      filterGroups: [
        {
          filters: [
            { propertyName: 'email', operator: 'EQ', value: ownerEmail }
          ]
        }
      ],
      properties: ['internal_only__availability']
    })
  };

  const response = await fetch(url, payload);
  const data = await response.json();

  const contactID = data.results[0].id;
  const availability = data.results[0].properties.internal_only__availability;

  return [contactID, availability];
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EPBrivity_0-1699560260577.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/102990iF3E8820962A68986/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EPBrivity_0-1699560260577.jpeg" alt="EPBrivity_0-1699560260577.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EPBrivity_1-1699560427878.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/102991i049ECA0923EBDE39/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EPBrivity_1-1699560427878.jpeg" alt="EPBrivity_1-1699560427878.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Step 4 - Create a branch based on the value of of &lt;STRONG&gt;availability&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Step 5 - On the branch where availability equals "Out of Office", create a step to clear Ticket Owner.&lt;/P&gt;&lt;P&gt;Step 6 (Optional) - You can also use the API to create a note and associate it with the ticket from your trigger. Make sure to select the appropriate outputs from your first code step as inputs in the Properties to include in code section in this code step. Here is an example of what we did, although you can edit the verbiage in the hs_note_body section:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="javascript"&gt;const fetch = require('node-fetch');

exports.main = async (event, callback) =&amp;gt; {
  const ACCESS_TOKEN = process.env.SECRET_NAME;
  const ownerFullName = event.inputFields['ownerFullName'];
  const ownerFirstName = event.inputFields['ownerFirstName'];
  const hs_ticket_id = event.inputFields['hs_ticket_id'];
  const current_timestamp = Math.floor(new Date().getTime());
  
  console.log(current_timestamp);
    
  
  const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Bearer ' + ACCESS_TOKEN,
  },
  body: `{
    "associations": [
      {
        "to": {
          "id": "${hs_ticket_id}"
        },
        "types": [
          {
            "associationCategory": "HUBSPOT_DEFINED",
            "associationTypeId": 228
          }
        ]
      }
    ],
    "properties": {
      "hs_note_body": "&amp;lt;p&amp;gt;The customer responded to this ticket, but the original owner (&amp;lt;strong&amp;gt;${ownerFullName}&amp;lt;/strong&amp;gt;) is out of office. This ticket should be reassigned to another support rep so that they can respond to the customer.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&amp;lt;h2&amp;gt;&amp;lt;strong&amp;gt;Note to new assignee:&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Please assess and proceed based on the following scenarios&amp;lt;/p&amp;gt;&amp;lt;ol&amp;gt;&amp;lt;li&amp;gt;If there is not enough information to proceed with the ticket on your own, the issue is non-urgent, and ${ownerFirstName} will be back within 2 days: &amp;lt;strong&amp;gt;Email the customer to ask how you can help or if they would like to wait for ${ownerFirstName} to return&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;If there is not enough information to proceed with the ticket on your own and ${ownerFirstName} will be out for more than 2 days after you have received the ticket: &amp;lt;strong&amp;gt;Take ownership of the ticket moving forward.&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;If there is enough information to proceed with the ticket on your own: &amp;lt;strong&amp;gt;Resolve or work on the ticket until ${ownerFirstName} returns. When they return, if it makes more sense for you to keep working on this issue, retain ownership.&amp;lt;/strong&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;If none of the scenarios above apply, reach out to your team lead to see how to proceed.&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;",
      "hubspot_owner_id": "WHATEVER ID YOU WANT",
      "hs_timestamp": "${current_timestamp}"
    }
  }`,
};

fetch('https://api.hubapi.com/crm/v3/objects/notes', options)
  .then(response =&amp;gt; response.json())
  .then(response =&amp;gt; console.log(response))
  .catch(err =&amp;gt; console.error(err));

  
  
  
  callback({
    outputFields: {
      
    }
  });
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EPBrivity_2-1699560829739.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/102992iEC304C1CE3C2F995/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EPBrivity_2-1699560829739.jpeg" alt="EPBrivity_2-1699560829739.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is your TLDR on how this works:&lt;/P&gt;&lt;P&gt;- first code snippet will find the Ticket Owner's Email address using their ID&lt;/P&gt;&lt;P&gt;- as long as there is a corresponding contact in your Hubspot CRM with the same email address as the owner, the code will look at the Availability property on that contact and return the Out of Office value or Available value. The email that you see in the top-right corner when you click the dropdown should be the email of the contact you set the Availability value for:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EPBrivity_3-1699561102384.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/102993i4C0F111AC71614D7/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EPBrivity_3-1699561102384.jpeg" alt="EPBrivity_3-1699561102384.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="EPBrivity_4-1699561190951.jpeg" style="width: 400px;"&gt;&lt;img src="https://community.hubspot.com/t5/image/serverpage/image-id/102994i3D4BF92656080D51/image-size/medium?v=v2&amp;amp;px=400" role="button" title="EPBrivity_4-1699561190951.jpeg" alt="EPBrivity_4-1699561190951.jpeg" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It's not a perfect solution, but it should get the job done. When members of the team go out on vacation, they are instructed to set their Availability to Out of Office before they leave, and if someone calls out sick, a leader will go set it for them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am not an expert at this stuff, but actively learning and would love feedback if anyone runs across this and finds ways to make it better. Let me know if you have any questions or concerns!&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Ethan&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 09 Nov 2023 20:25:36 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/877564#M6038</guid>
      <dc:creator>EPBrivity</dc:creator>
      <dc:date>2023-11-09T20:25:36Z</dc:date>
    </item>
    <item>
      <title>Re: Set Out Of Office for Ticket Owner</title>
      <link>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/1101557#M7970</link>
      <description>&lt;P class="p1"&gt;If you have Service Enterprise! Here is how:&lt;BR /&gt;&lt;BR /&gt;1. Set up Routing rules -- this is where you can get granular with how incoming tickets (from chat, forms, email, etc). Language, geography, topic-based + more can be set up here.&lt;/P&gt;
&lt;P class="p1"&gt;(Skills are managed under each user's profile. They are User properties to setup and select from&lt;/P&gt;
&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="p1"&gt;2. Check the box to make sure tickets are only being assigned to AVAILABLE users.&lt;/P&gt;
&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class="p1"&gt;To fully put this in action, make sure your team does both or either of the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI class="p1"&gt;Manually set Away status when out of office or away from desk&lt;/LI&gt;
&lt;LI class="p1"&gt;In their User profile under preferences, set their working hours and also any same-day or future out of office (during these times their status will auto set to "away")&lt;/LI&gt;
&lt;/UL&gt;
&lt;P class="p2"&gt;This will allow you to skip ticket assignments of those not available either due to OOO or away from their desks.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 30 Jan 2025 01:41:31 GMT</pubDate>
      <guid>https://community.hubspot.com/t5/Tickets-Conversations/Set-Out-Of-Office-for-Ticket-Owner/m-p/1101557#M7970</guid>
      <dc:creator>Samanderson41</dc:creator>
      <dc:date>2025-01-30T01:41:31Z</dc:date>
    </item>
  </channel>
</rss>

